perm filename GI.PRO[AP,DBL] blob sn#118064 filedate 1974-09-03 generic text, type T, neo UTF8
00100	LOG LENAT  
00200	 Job 9 on TTY42 1-SEP-74 20:24
03400	
03500	@LISP
03600	
03700	
03800	INTERLISP-10  29-AUG-74 ...
03900	
04000	
04100	Good evening, Doug.
04200	←LOAD(STOR.L)
04300	FILE CREATED  1-SEP-74 16:25:45
04400	STORCOMS
04500	
04600	GC: 1
04700	1494, 6102 FREE WORDS
04800	
04900	GC: 8
05000	5028, 75035 FREE WORDS
05100	
05200	GC: 12
05300	1011, 2201 FREE WORDS
05400	
05500	GC: 28
05600	2031, 5103 FREE WORDS
05700	
05800	GC: 30
05900	497, 3057 FREE WORDS
06000	
06100	TYPE USED      ASSIGNED  SYSTEM
06200	1    42        6144      34816
06300	2    5120      5120      55296
06400	4    0         512       512
06500	8    595       75776     16384
06600	12   27        6656      13824
06700	16   0         512       512
06800	18   6         1536      1024
06900	24   4         512       1024
07000	28   17        5120      8704
07100	30   14        3072      2560
07200	SUM  5825      104960    134656
07300	STOR.L;6
07400	←LOAD(PUP6.COM)
07500	COMPILED ON  1-SEP-74 16:03:51
07600	FILE CREATED  1-SEP-74 15:51:05
07700	(LISTFILES redefined)
07800	
07900	GC: 1
08000	2608, 2608 FREE WORDS
08100	
08200	GC: 1
08300	1380, 1380 FREE WORDS
08400	
08500	GC: 1
08600	491, 491 FREE WORDS
08700	
08800	GC: 1
08900	400, 400 FREE WORDS
09000	
09100	GC: 1
09200	212, 724 FREE WORDS
09300	
09400	GC: 1
09500	396, 396 FREE WORDS
09600	
09700	GC: 1
09800	213, 213 FREE WORDS
09900	PUP6COMS
10000	
10100	GC: 16
10200	0, 512 FREE WORDS
10300	
10400	DWIM DISABLED. TO GET AUTOMATIC EDITF FROM SOURCE, TYPE DWIM(T)
10500	 MINI PUP FILE; USE FAD OR AD OR MAKEFILE PUP6COMS
10600	(PUP6COMS reset)
10700	PUP6.COM;2
10800	←STORAGE(T)
10900	
11000	TYPE USED      ASSIGNED  SYSTEM
11100	1    6559      6656      34816
11200	2    5120      5120      55296
11300	4    23        512       512
11400	8    41591     75776     16384
11500	12   5967      6656      13824
11600	16   512       1024      512
11700	18   421       1536      1024
11800	24   273       512       1024
11900	28   5071      5120      8704
12000	30   2712      3072      2560
12100	SUM  68249     105984    134656
12200	NIL
12300	←LISPXSTATS)
12400	(4 LISPX INPUTS)
12500	(2660 UNDO SAVES)
14000	(0:7:3 CONSOLE TIME)
14100	(0:0:0 OF IT IN THE EDITOR)
14200	
14300	(0:2:16 CPU TIME)
14400	(0:0:0 OF IT IN DWIM)
14500	T
14600	←LOAD(GIF)
14700	FILE CREATED 20-AUG-74 17:31:19
14800	GIFVARS
14900	
15000	GC: 28
15100	20, 532 FREE WORDS
15200	GIF.;3
18900	←ENTER(T)
19000	
19100	I CAN GUESS ALL YOUR ANSWERS FOR A WHILE; SHOULD I? YES
19200	USER INTERRUPT LEVEL... 0
19300	
19400	PUP: (PUP WANTS ANY TASK)
19500	
19600	
19700	USER: (WRITE A PROGRAM WHICH INFERS GRAMMARS)
19800	
19900	PUP: (PUP IS ABOUT TO WRITE A PROGRAM TO DO (GRAMMATICAL:INFERENCE))
20000	
20100	
20200	PUP: ((G:I GRAMMATICAL:INFERENCE G GI) IS THE SET OF PLAUSIBLE NAMES OF 
20300	**(GRAMMATICAL INFERENCE) WHICH IS AN EXPANSION
20400	OF (GRAMMATICAL:INFERENCE))
20500	
20600	
20700	PUP: (PUP WANTS USER TO TYPE IN NAME FOR (GRAMMATICAL:INFERENCE))
20800	
20900	I DON'T KNOW ANY NAMES FOR (VECTOR GRAMMATICAL:INFERENCE), SO YOU'LL HAV
21000	**E TO
21100	TYPE A BRAND NEW NAME IN TO ME. 
21200	USER: GI
21300	
21400	PUP: (PUP AND USER ARE ABLE TO REFER TO (GRAMMATICAL:INFERENCE) AS TASK:
21500	**NAME WHICH IS GI:1)
21600	
21700	
21800	PUP: (THE NAME OF THE PROGRAM TO DO (GRAMMATICAL:INFERENCE) IS GI:1)
21900	
22000	
22100	MOVE CURSOR TO (VECTOR GI:1 TYPE OF (VECTOR GRAMMATICAL:INFERENCE))
22200	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
22300	**ION:((VECTOR ABILITY TO INFER GRAMMARS 
22400	DIFFERENTLY, GIVEN THEIR TYPE) (VECTOR ABILITY TO INFER GRAMMARS OF A GI
22500	**VEN, FIXED TYPE) (ERROR!))(ABOVE, ARG1 REFERS
22600	TO NIL ;ALSO, PLEASE IGNORE THE THIRD 'CHOICE'; IT IS ONLY FOR ME TO LOO
22700	**K AT)
22800	
22900	
23000	SINCE THE DECISION IS DICHOTOMOUS, TYPE A 1  OR   A MEANS THAT  IS C(VEC
23100	**TOR ABILITY TO INFER GRAMMARS DIFFERENTLY, GIVEN THEIR TYPE) IS CORREC
23200	**T.
23300	2 MEANS THAT (VECTOR ABILITY TO INFER GRAMMARS OF A GIVEN, FIXED TYPE) I
23400	**S CORRECT.
23500	
23600	SHOULD I DISCUSS RAMIFICATIONS?NO
23700	
23800	USER: 2
23900	
24000	WARNING: SATISFY IS SHAKING ITS HEAD ABOUT THIS ONE:(VECTOR ENCODABLE SE
24100	**CTION ORIG:FUNC)
24200	MOVE CURSOR TO GI:1
24300	
24400	
24500	PUP IS NOW GOING TO ENCODE THE PIECE 
24600	  (INFER:FIXEDCLASS:GRAMMARS)
24700	
24800	
24900	OF THE FUNCTION GI:1 INTO LISP.   FUNCTION NAMES WILL
25000	BE QUERIED IN PREORDER, AS NEEDED.
25100	
25200	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR INFER:FIXEDCLASS:GRAMMARS)
25300	I DON'T KNOW ANY NAMES FOR (VECTOR INFER:FIXEDCLASS:GRAMMARS), SO YOU'LL
25400	** HAVE TO
25500	TYPE A BRAND NEW NAME IN TO ME. 
25600	USER: IFG
25700	
25800	THE NAME CHOSEN IS IFG:2
25900	
26000	DRAW A LINE FROM THE FUNCTION CALL  NIL OF THE FUNCTION GI:1 TO THIS NEW
26100	** PIECE OF CODE, WHICH IS ITS BODY:
26200	
26300	(GI:1
26400	  (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
26500	    (IFG:2)))
26600	(GI:1 redefined)
26700	
26800	MOVE CURSOR TO (VECTOR IFG:2 TYPE OF (VECTOR INFER:FIXEDCLASS:GRAMMARS))
26900	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ALTERNATIVES DE
27000	**CISION:(INFER:PHRASESTRUCTURE:GRAMMARS 
27100	INFER:CONTEXTSENSITIVE:GRAMMARS INFER:CONTEXTFREE:GRAMMARS INFER:REGULAR
27200	**:GRAMMARS)
27300	
27400	SINCE WE HAVE A SIMPLE SET OF ALTERNATIVES, SIMPLY TYPE IN YOUR CHOICE
27500	SHOULD I DISCUSS RAMIFICATIONS?NO
27600	
27700	
27800	USER: INFER:PHRASESTRUCTURE:GRAMMARS
27900	
28000	MOVE CURSOR TO IFG:2
28100	
28200	
28300	PUP IS NOW GOING TO ENCODE THE PIECE 
28400	  (INFER:PHRASESTRUCTURE:GRAMMARS)
28500	
28600	
28700	OF THE FUNCTION IFG:2 INTO LISP.   FUNCTION NAMES WILL
28800	BE QUERIED IN PREORDER, AS NEEDED.
28900	
29000	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR INFER:PHRASESTRUCTURE:GRAMMAR
29100	**S)
29200	I DON'T KNOW ANY NAMES FOR (VECTOR INFER:PHRASESTRUCTURE:GRAMMARS), SO Y
29300	**OU'LL HAVE TO
29400	TYPE A BRAND NEW NAME IN TO ME. 
29500	USER: NIL
29600	
29700	THE NAME CHOSEN IS INFER:PHRASESTRUCTURE:GRAMMARS:3
29800	
29900	DRAW A LINE FROM THE FUNCTION CALL  (IFG:2) OF THE FUNCTION IFG:2 TO THI
30000	**S NEW PIECE OF CODE, WHICH IS ITS BODY:
30100	
30200	(IFG:2
30300	  (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
30400	    (INFER:PHRASESTRUCTURE:GRAMMARS:3)))
30500	(IFG:2 redefined)
30600	DEBUG F1 FDESC UNKNOWN  (VECTOR PROGN (VECTOR SETQ SET:OF:RULES NIL) (VE
30700	**CTOR PARTITION:A:DOMAIN))
30800	GC: 30
30900	394, 394 FREE WORDS
31000	
31100	MOVE CURSOR TO INFER:PHRASESTRUCTURE:GRAMMARS:3
31200	
31300	
31400	PUP IS NOW GOING TO ENCODE THE PIECE 
31500	  (PROGN (SETQ SET:OF:RULES NIL)
31600	         (PARTITION:A:DOMAIN))
31700	
31800	
31900	OF THE FUNCTION INFER:PHRASESTRUCTURE:GRAMMARS:3 INTO LISP.   FUNCTION N
32000	**AMES WILL
32100	BE QUERIED IN PREORDER, AS NEEDED.
32200	
32300	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARTITION:A:DOMAIN)
32400	I DON'T KNOW ANY NAMES FOR (VECTOR PARTITION:A:DOMAIN), SO YOU'LL HAVE T
32500	**O
32600	TYPE A BRAND NEW NAME IN TO ME. 
32700	USER: PAD
32800	
32900	THE NAME CHOSEN IS PAD:4
33000	
33100	
33200	DRAW A LINE FROM THE FUNCTION CALL  (INFER:PHRASESTRUCTURE:GRAMMARS:3) O
33300	**F THE FUNCTION INFER:PHRASESTRUCTURE:GRAMMARS:3 TO THIS NEW PIECE OF C
33400	**ODE, WHICH IS ITS BODY:
33500	
33600	(INFER:PHRASESTRUCTURE:GRAMMARS:3
33700	  (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
33800	    (PROGN (SETQ SET:OF:RULES NIL)
33900	           (PAD:4))))
34000	(INFER:PHRASESTRUCTURE:GRAMMARS:3 redefined)
34100	
34200	MOVE CURSOR TO (VECTOR PAD:4 TYPE OF (VECTOR PARTITION:A:DOMAIN))
34300	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SOMEOF DECISION
34400	**:(PARTITION:BY:TAKE:ELE:AND:CLASS 
34500	PARTITION:BY:TAKE:CLASS:GET:ELE PARTITION:BY:TAKE:ELE:GET:CLASS)
34600	SINCE THE DECISION IS SOME:OF, TYPE ANY ORDERED SUBSET OF: 
34700	(A .... PARTITION:BY:TAKE:ELE:AND:CLASS)
34800	(B .... PARTITION:BY:TAKE:CLASS:GET:ELE)
34900	(C .... PARTITION:BY:TAKE:ELE:GET:CLASS)
35000	
35100	FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
35200	SHOULD I DISCUSS RAMIFICATIONS?NO
35300	
35400	USER: (A C)
35500	
35600	
35700	AT THIS POINT, I ALMOST RECOMMENDED VIRTUAL STRUCTURING, BUT DECIDED
35800	AGAINST IT.  THE LIST STRUCTURE WOULD HAVE BEEN DIVIDED INTO THESE
35900	PIECES: (PARTITION:BY:TAKE:ELE:AND:CLASS:PART:OF:NIL PARTITION:BY:TAKE:C
36000	**LASS:GET:ELE:PART:OF:NIL 
36100	PARTITION:BY:TAKE:ELE:GET:CLASS:PART:OF:NIL)
36200	(I GUESS THAT EACH OF THE ABOVE :NIL-S WOULD GET REPLACED BY SOMETHING L
36300	**IKE ":PARTITION:LIST")
36400	
36500	
36600	MOVE CURSOR TO PAD:4
36700	
36800	
36900	PUP IS NOW GOING TO ENCODE THE PIECE 
37000	  (REPEATEDLY (TAKE:HOLD:OF ELEMENT)
37100	              (COND ((IS:OF:TYPE ELEMENT (COMMENT PARTITION:BY:TAKE:ELE:
37200	**AND:CLASS))
37300	                     (PROGN (SETQ PRESULT (GET:HOLD:OF NAME:OF:CLASS))
37400	                            (COMMENT NOTICE THAT WE DO NOT NECESSARILY H
37500	**AVE TO MAKE THE PRECEDING 'GUESS' IN ALL 
37600	                                     POSSIBLE ALGORITHMS)
37700	                            (TAKE:HOLD:OF NAME:OF:CLASS)
37800	                            (COMPLEX:MODIFY:STRUCTURE NAME:OF:CLASS ELEM
37900	**ENT PRESULT)))
38000	                    (T (PROGN (SETQ PRESULT (GET:HOLD:OF NAME:OF:CLASS))
38100	                              (TAKE:HOLD:OF NAME:OF:CLASS)
38200	                              (COMPLEX:MODIFY:STRUCTURE NAME:OF:CLASS EL
38300	**EMENT PRESULT)))))
38400	
38500	
38600	OF THE FUNCTION PAD:4 INTO LISP.   FUNCTION NAMES WILL
38700	BE QUERIED IN PREORDER, AS NEEDED.
38800	
38900	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR TAKE:HOLD:OF)
39000	I DON'T KNOW ANY NAMES FOR (VECTOR TAKE:HOLD:OF), SO YOU'LL HAVE TO
39100	TYPE A BRAND NEW NAME IN TO ME. 
39200	USER: NIL
39300	
39400	THE NAME CHOSEN IS TAKE:HOLD:OF:5
39500	
39600	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
39700	I DON'T KNOW ANY NAMES FOR (VECTOR ELEMENT), SO YOU'LL HAVE TO
39800	TYPE A BRAND NEW NAME IN TO ME. 
39900	USER: NIL
40000	
40100	THE NAME CHOSEN IS ELEMENT:6
40200	
40300	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR IS:OF:TYPE)
40400	I DON'T KNOW ANY NAMES FOR (VECTOR IS:OF:TYPE), SO YOU'LL HAVE TO
40500	TYPE A BRAND NEW NAME IN TO ME. 
40600	USER: NIL
40700	
40800	THE NAME CHOSEN IS IS:OF:TYPE:7
40900	
41000	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
41100	IS THIS THE SAME AS A (VECTOR ELEMENT) WHICH WE'VE ALREADY SEEN AND NAME
41200	**D?
41300	
41400	USER: YES
41500	
41600	SINCE ELEMENT:6 IS THE ONLY NAME FOR (VECTOR ELEMENT),
41700	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
41800	YOU WANT. AM I RIGHT?
41900	USER: YES
42000	
42100	THE NAME CHOSEN IS ELEMENT:6
42200	
42300	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR GET:HOLD:OF)
42400	I DON'T KNOW ANY NAMES FOR (VECTOR GET:HOLD:OF), SO YOU'LL HAVE TO
42500	TYPE A BRAND NEW NAME IN TO ME. 
42600	USER: NIL
42700	
42800	THE NAME CHOSEN IS GET:HOLD:OF:8
42900	
43000	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR TAKE:HOLD:OF)
43100	IS THIS THE SAME AS A (VECTOR TAKE:HOLD:OF) WHICH WE'VE ALREADY SEEN AND
43200	** NAMED?
43300	
43400	USER: NO
43500	I DON'T KNOW ANY NAMES FOR (VECTOR TAKE:HOLD:OF), SO YOU'LL HAVE TO
43600	TYPE A BRAND NEW NAME IN TO ME. 
43700	USER: NIL
43800	
43900	THE NAME CHOSEN IS TAKE:HOLD:OF:9
44000	
44100	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR COMPLEX:MODIFY:STRUCTURE)
44200	GC: 30
44300	378, 378 FREE WORDS
44400	I DON'T KNOW ANY NAMES FOR (VECTOR COMPLEX:MODIFY:STRUCTURE), SO YOU'LL 
44500	**HAVE TO
44600	TYPE A BRAND NEW NAME IN TO ME. 
44700	USER: NIL
44800	
44900	THE NAME CHOSEN IS COMPLEX:MODIFY:STRUCTURE:10
45000	
45100	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
45200	IS THIS THE SAME AS A (VECTOR ELEMENT) WHICH WE'VE ALREADY SEEN AND NAME
45300	**D?
45400	
45500	USER: YES
45600	
45700	SINCE ELEMENT:6 IS THE ONLY NAME FOR (VECTOR ELEMENT),
45800	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
45900	YOU WANT. AM I RIGHT?
46000	USER: YES
46100	
46200	THE NAME CHOSEN IS ELEMENT:6
46300	
46400	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR GET:HOLD:OF)
46500	IS THIS THE SAME AS A (VECTOR GET:HOLD:OF) WHICH WE'VE ALREADY SEEN AND 
46600	**NAMED?
46700	
46800	USER: YES
46900	
47000	SINCE GET:HOLD:OF:8 IS THE ONLY NAME FOR (VECTOR GET:HOLD:OF),
47100	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
47200	YOU WANT. AM I RIGHT?
47300	USER: YES
47400	
47500	THE NAME CHOSEN IS GET:HOLD:OF:8
47600	
47700	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR TAKE:HOLD:OF)
47800	IS THIS THE SAME AS A (VECTOR TAKE:HOLD:OF) WHICH WE'VE ALREADY SEEN AND
47900	** NAMED?
48000	
48100	USER: NO
48200	I DON'T KNOW ANY NAMES FOR (VECTOR TAKE:HOLD:OF), SO YOU'LL HAVE TO
48300	TYPE A BRAND NEW NAME IN TO ME. 
48400	USER: NIL
48500	
48600	THE NAME CHOSEN IS TAKE:HOLD:OF:11
48700	
48800	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR COMPLEX:MODIFY:STRUCTURE)
48900	IS THIS THE SAME AS A (VECTOR COMPLEX:MODIFY:STRUCTURE) WHICH WE'VE ALRE
49000	**ADY SEEN AND NAMED?
49100	
49200	USER: YES
49300	
49400	SINCE COMPLEX:MODIFY:STRUCTURE:10 IS THE ONLY NAME FOR (VECTOR COMPLEX:M
49500	**ODIFY:STRUCTURE),
49600	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
49700	YOU WANT. AM I RIGHT?
49800	USER: YES
49900	
50000	THE NAME CHOSEN IS COMPLEX:MODIFY:STRUCTURE:10
50100	
50200	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
50300	IS THIS THE SAME AS A (VECTOR ELEMENT) WHICH WE'VE ALREADY SEEN AND NAME
50400	**D?
50500	
50600	USER: YES
50700	
50800	SINCE ELEMENT:6 IS THE ONLY NAME FOR (VECTOR ELEMENT),
50900	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
51000	YOU WANT. AM I RIGHT?
51100	USER: YES
51200	
51300	THE NAME CHOSEN IS ELEMENT:6
51400	
51500	DRAW A LINE FROM THE FUNCTION CALL  (PAD:4) OF THE FUNCTION PAD:4 TO THI
51600	**S NEW PIECE OF CODE, WHICH IS ITS BODY:
51700	
51800	(PAD:4
51900	  (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
52000	    (PROG NIL
52100	      LABEL:1
52200	          (TAKE:HOLD:OF:5 ELEMENT:6)
52300	          (COND
52400	            ((IS:OF:TYPE:7 ELEMENT:6 (COMMENT PARTITION:BY:TAKE:ELE:AND:
52500	**CLASS))
52600	              (PROGN (SETQ PRESULT (GET:HOLD:OF:8 NAME:OF:CLASS))
52700	                     (COMMENT NOTICE THAT WE DO NOT NECESSARILY HAVE TO 
52800	**MAKE THE PRECEDING 'GUESS'
52900	                        IN ALL POSSIBLE ALGORITHMS)
53000	                     (TAKE:HOLD:OF:9 NAME:OF:CLASS)
53100	                     (COMPLEX:MODIFY:STRUCTURE:10 NAME:OF:CLASS ELEMENT:
53200	**6 PRESULT)))
53300	            (T (PROGN (SETQ PRESULT (GET:HOLD:OF:8 NAME:OF:CLASS))
53400	                      (TAKE:HOLD:OF:11 NAME:OF:CLASS)
53500	                      (COMPLEX:MODIFY:STRUCTURE:10 NAME:OF:CLASS ELEMENT
53600	**:6 PRESULT))))
53700	          (GO LABEL:1)
53800	          (COMMENT INFINITE LOOP IN THIS PROG))))
53900	(PAD:4 redefined)
54000	(COMMENT PRESULT IS NOT A BEING YET)
54100	
54200	MOVE CURSOR TO (VECTOR ELEMENT:6 TYPE OF (VECTOR ELEMENT))
54300	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
54400	**SION:(WHAT IS AN ELEMENT)
54500	SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
54600	TYPE IN THE DEFINITION OF ELEMENT:6
54700	SHOULD I DISCUSS RAMIFICATIONS?NO
54800	
54900	USER: (A DESCRIPTION OF AN UNCOMMENTED STRING)
55000	
55100	PUP: ((U:S UNCOMMENTED:STRING U US) IS THE SET OF PLAUSIBLE NAMES OF (UN
55200	**COMMENTED STRING) WHICH IS AN EXPANSION OF
55300	(UNCOMMENTED STRING))
55400	
55500	
55600	PUP: (PUP WANTS USER TO TYPE IN NAME FOR (UNCOMMENTED STRING))
55700	
55800	
55900	GC: 30
56000	379, 379 FREE WORDS
56100	I DON'T KNOW ANY NAMES FOR (VECTOR UNCOMMENTED VECTOR STRING), SO YOU'LL
56200	** HAVE TO
56300	TYPE A BRAND NEW NAME IN TO ME. 
56400	USER: NIL
56500	
56600	PUP: (PUP AND USER ARE ABLE TO REFER TO (UNCOMMENTED STRING) AS TNAME WH
56700	**ICH IS UNCOMMENTED:STRING:12)
56800	
56900	
57000	MOVE CURSOR TO ELEMENT:6
57100	
57200	
57300	PUP IS NOW GOING TO ENCODE THE PIECE 
57400	  (STRUCTURE (CLASS:NAME NAME N)
57500	             (LETTERS STRING L))
57600	
57700	
57800	OF THE FUNCTION ELEMENT:6 INTO LISP.   FUNCTION NAMES WILL
57900	BE QUERIED IN PREORDER, AS NEEDED.
58000	
58100	
58200	DRAW A LINE FROM THE FUNCTION CALL  (ELEMENT:6 PRESULT) OF THE FUNCTION 
58300	**ELEMENT:6 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
58400	
58500	(ELEMENT:6
58600	  (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
58700	    (STRUCTURE (CLASS:NAME NAME N)
58800	               (LETTERS STRING L))))
58900	(ELEMENT:6 redefined)
59000	
59100	MOVE CURSOR TO (VECTOR IS:OF:TYPE:7 TYPE OF (VECTOR IS:OF:TYPE))
59200	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
59300	**SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
59400	PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
59500	** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
59600	TO IT)SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
59700	TYPE IN THE DEFINITION OF IS:OF:TYPE:7
59800	
59900	SINCE THIS IS A PREDICATE, THE EXPRESSION YOU TYPE IN SHOULD BE A
60000	LOGICAL EXPRESSION, WHICH IS TRUE IF ELEMENT:6 IS OF
60100	THE (PARTITION:BY:TAKE:ELE:AND:CLASS) TYPE, AND SHOULD BE FALSE IF IT IS
60200	**NT OF
60300	THAT TYPE.
60400	
60500	SHOULD I DISCUSS RAMIFICATIONS?NO
60600	
60700	USER: (THE FRONT PART OF ELEMENT ISNT ???)
60800	(IS ??? A LITERAL CONSTANT (WHOSE VALUE SHOULD BE ITSELF) (REPLY YES OR 
60900	**NO, PLEASE) USER...)
61000	YES
61100	
61200	MOVE CURSOR TO IS:OF:TYPE:7
61300	
61400	
61500	PUP IS NOW GOING TO ENCODE THE PIECE 
61600	  (NOT (EQUAL (CAR ELEMENT)
61700	              ???))
61800	
61900	
62000	OF THE FUNCTION IS:OF:TYPE:7 INTO LISP.   FUNCTION NAMES WILL
62100	BE QUERIED IN PREORDER, AS NEEDED.
62200	
62300	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
62400	IS THIS THE SAME AS A (VECTOR ELEMENT) WHICH WE'VE ALREADY SEEN AND NAME
62500	**D?
62600	
62700	USER: YES
62800	
62900	SINCE ELEMENT:6 IS THE ONLY NAME FOR (VECTOR ELEMENT),
63000	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
63100	YOU WANT. AM I RIGHT?
63200	USER: YES
64200	
64300	THE NAME CHOSEN IS ELEMENT:6
64400	
64500	
64600	DRAW A LINE FROM THE FUNCTION CALL  (IS:OF:TYPE:7 ELEMENT:6 (COMMENT PAR
64700	**TITION:BY:TAKE:ELE:AND:CLASS)) OF THE FUNCTION IS:OF:TYPE:7 TO THIS NE
64800	**W PIECE OF CODE, WHICH IS ITS BODY:
64900	
65000	(IS:OF:TYPE:7
65100	  (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
65200	    (NOT (EQUAL (CAR ELEMENT:6)
65300	                ???))))
65400	
65500	
65600	IS (MATCH (TUPLE COMMENT FRAG1) DUMMY:ARGUMENT:2) STILL THE PROPER EXPLI
65700	**CIT
65800	ARGS CHECK FOR THE FUNCTION IS:OF:TYPE:7?
65900	USER: NO
66000	
66100	WHAT IS THE CHECK, THEN? (I SUGGEST 'T')
66200	USER: T
66300	(IS:OF:TYPE:7 redefined)
66400	
66500	MOVE CURSOR TO (VECTOR TAKE:HOLD:OF:5 TYPE OF (VECTOR TAKE:HOLD:OF))
66600	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
66700	**ION:((SETQQ QUALIFIER BRAND) (FLOW:PRECEDED
66800	(VECTOR SETQ (@ ARG1) ANY1)) (SETQQ QUALIFIER CORRECT) (PUPRINT (TUPLE T
66900	**HE ASSIGNMENT WHICH SET (@ ARG1) ,NAMELY (@
67000	FLOW:ASSIGNMENT) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF (@ ARG1) BE PR
67100	**EAD IN AT THIS POINT IN THE PROGRAM FLOW?
67200	USER...)) (MEMBER (PREAD) (VECTOR NIL NO N)) T)(ABOVE, ARG1 REFERS TO EL
67300	**EMENT:6 ;ALSO, PLEASE IGNORE THE THIRD 'CHOICE';
67400	IT IS ONLY FOR ME TO LOOK AT)
67500	
67600	FLOW:PRECEDED ISNT IN YET.
67700	LOOK AT ARGUMENT AND ANSWER T OR NIL:
67800	(VECTOR SETQ ELEMENT:6 ANY1)
67900	
68000	(THIS WOULD NORMALLY BE DONE BY SYSTEM, NOT BY USER .... NIL
68100	
68200	AHA!!!! I'VE RESOLVED IT MYSELF!!! NO NEED TO INTERACT WITH THE SLOW
68300	USER CHANNEL AFTER ALL!!!
68400	(PUP IS ABOUT TO ENCODE AN ASSIGNMENT: (CLASS:NAME NAME N) WILL BE SET T
68500	**O SOME PART OF ARG1 WHICH IS GOING TO BE 
68600	INSTANTIATED DURING THE RUNNING OF THE PROGRAM AS ELEMENT:6 .PUP WANTS A
68700	** NAME FOR THIS 'SOME PART OF' FUNCTION.)
68800	
68900	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR SOME:PART:OF)
69000	I DON'T KNOW ANY NAMES FOR (VECTOR SOME:PART:OF), SO YOU'LL HAVE TO
69100	TYPE A BRAND NEW NAME IN TO ME. 
69200	USER: NIL
69300	
69400	THE NAME CHOSEN IS SOME:PART:OF:13
69500	(PUP IS ABOUT TO ENCODE AN ASSIGNMENT: (LETTERS STRING L) WILL BE SET TO
69600	** SOME PART OF ARG1 WHICH IS GOING TO BE 
69700	INSTANTIATED DURING THE RUNNING OF THE PROGRAM AS ELEMENT:6 .PUP WANTS A
69800	** NAME FOR THIS 'SOME PART OF' FUNCTION.)
69900	
70000	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR SOME:PART:OF)
70100	IS THIS THE SAME AS A (VECTOR SOME:PART:OF) WHICH WE'VE ALREADY SEEN AND
70200	** NAMED?
70300	
70400	USER: NO
70500	I DON'T KNOW ANY NAMES FOR (VECTOR SOME:PART:OF), SO YOU'LL HAVE TO
70600	TYPE A BRAND NEW NAME IN TO ME. 
70700	USER: NIL
70800	
70900	THE NAME CHOSEN IS SOME:PART:OF:14
71000	
71100	MOVE CURSOR TO TAKE:HOLD:OF:5
71200	
71300	
71400	PUP IS NOW GOING TO ENCODE THE PIECE 
71500	  (PROGN (PUPRINT (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6))
71600	         (SET ARG1 (PREAD))
71700	         (SETQ CLASS:NAME:NAME:N (SOME:PART:OF:13 (EVAL ARG1)))
71800	         (SETQ LETTERS:STRING:L (SOME:PART:OF:14 (EVAL ARG1)))
71900	         T)
72000	
72100	
72200	OF THE FUNCTION TAKE:HOLD:OF:5 INTO LISP.   FUNCTION NAMES WILL
72300	BE QUERIED IN PREORDER, AS NEEDED.
72400	
72500	GC: 30
72600	377, 377 FREE WORDS
72700	
72800	
72900	DRAW A LINE FROM THE FUNCTION CALL  (TAKE:HOLD:OF:5 ELEMENT:6) OF THE FU
73000	**NCTION TAKE:HOLD:OF:5 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
73100	
73200	(TAKE:HOLD:OF:5
73300	  (NLAMBDA (ARG1)
73400	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6)
73500	    (PROGN (PUPRINT (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6))
73600	           (SET ARG1 (PREAD))
73700	           (SETQ CLASS:NAME:NAME:N (SOME:PART:OF:13 (EVAL ARG1)))
73800	           (SETQ LETTERS:STRING:L (SOME:PART:OF:14 (EVAL ARG1)))
73900	           T)))
74000	(TAKE:HOLD:OF:5 redefined)
74100	(COMMENT NAME:OF:CLASS IS NOT A BEING YET)
74200	
74300	MOVE CURSOR TO (VECTOR GET:HOLD:OF:8 TYPE OF (VECTOR GET:HOLD:OF))
74400	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SOMEOF DECISION
74500	**:(COMPUTE SEARCH GENERATE:AND:TEST)
74600	SINCE THE DECISION IS SOME:OF, TYPE ANY ORDERED SUBSET OF: 
74700	(A .... COMPUTE)
74800	(B .... SEARCH)
74900	(C .... GENERATE:AND:TEST)
75000	
75100	FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
75200	SHOULD I DISCUSS RAMIFICATIONS?NO
75300	
75400	USER: (B)
75500	
75600	YOU MUST GIVE ME A LIST OF ALL THE VALUES THAT COULD EVER OCCUR AS
75700	NAMES ON THE LIST STRUCTURE SET:OF:POSSIBLE:NAMES:OF:CLASS
75800	IF THIS ISN'T MEANINGFUL, REPLY NIL.
75900	USER: (LEGAL ILLEGAL)
76000	
76100	
76200	DOES THERE EXIST A PREDICATE WHICH IS TRUE PRECISELY WHEN AN ELEMENT
76300	IS LEGAL AND IS NIL IFF THE ELEMENT IS ILLEGAL?
76400	USER: (YES OR NO, FOR NOW......) YES
76500	
76600	OK.  NOW GIVE ME THIS PREDICATE, IN TERMS OF ELEMENT:6
76700	I SUGGEST THAT THIS INVOLVES ONE OF THESE: (PARSE TEST)
76800	USER: (ELEMENT:6 CAN BE PARSED)
76900	
77000	MOVE CURSOR TO (VECTOR GET:HOLD:OF:8 TYPE OF (VECTOR GET:HOLD:OF))
77100	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
77200	**N:(DOES AN ALGORITHM ALREADY EXIST WHICH GETS
77300	PRECISELY ELEMENT:6)SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO
77400	**.
77500	SHOULD I DISCUSS RAMIFICATIONS?NO
77600	
77700	NOW TYPE YOUR ANSWER: NO
77800	
77900	OK, READY TO MOVE ON NOW.
78000	
78100	MOVE CURSOR TO GET:HOLD:OF:8
78200	
78300	
78400	PUP IS NOW GOING TO ENCODE THE PIECE 
78500	  (PROGN (SETQ POSSIBLE:NAME:OF:CLASS (COND ((PARSE ELEMENT:6)
78600	                                             LEGAL)
78700	                                            (T ILLEGAL)))
78800	         (PUPRIN1 "
78900	MY GUESS FOR THIS IS ")
79000	         (PUPRINT POSSIBLE:NAME:OF:CLASS))
79100	
79200	
79300	OF THE FUNCTION GET:HOLD:OF:8 INTO LISP.   FUNCTION NAMES WILL
79400	BE QUERIED IN PREORDER, AS NEEDED.
79500	
79600	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE)
79700	I DON'T KNOW ANY NAMES FOR (VECTOR PARSE), SO YOU'LL HAVE TO
79800	TYPE A BRAND NEW NAME IN TO ME. 
79900	USER: NIL
80000	
80100	THE NAME CHOSEN IS PARSE:15
80200	
80300	
80400	DRAW A LINE FROM THE FUNCTION CALL  (GET:HOLD:OF:8 NAME:OF:CLASS) OF THE
80500	** FUNCTION GET:HOLD:OF:8 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
80600	
80700	(GET:HOLD:OF:8
80800	  (NLAMBDA (DUMMY:ARGUMENT:1)
80900	    (PROGN (SETQ POSSIBLE:NAME:OF:CLASS (COND
81000	               ((PARSE:15 ELEMENT:6)
81100	                 LEGAL)
81200	               (T ILLEGAL)))
81300	           (PUPRIN1 "
81400	MY GUESS FOR THIS IS ")
81500	           (PUPRINT POSSIBLE:NAME:OF:CLASS))))
81600	(GET:HOLD:OF:8 redefined)
81700	
81800	MOVE CURSOR TO (VECTOR TAKE:HOLD:OF:9 TYPE OF (VECTOR TAKE:HOLD:OF))
81900	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
82000	**ION:((SETQQ QUALIFIER BRAND) (FLOW:PRECEDED
82100	(VECTOR SETQ (@ ARG1) ANY1)) (SETQQ QUALIFIER CORRECT) (PUPRINT (TUPLE T
82200	**HE ASSIGNMENT WHICH SET (@ ARG1) ,NAMELY (@
82300	FLOW:ASSIGNMENT) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF (@ ARG1) BE PR
82400	**EAD IN AT THIS POINT IN THE PROGRAM FLOW?
82500	USER...)) (MEMBER (PREAD) (VECTOR NIL NO N)) T)(ABOVE, ARG1 REFERS TO NA
82600	**ME:OF:CLASS ;ALSO, PLEASE IGNORE THE THIRD
82700	'CHOICE'; IT IS ONLY FOR ME TO LOOK AT)
82800	
82900	FLOW:PRECEDED ISNT IN YET.
83000	LOOK AT ARGUMENT AND ANSWER T OR NIL:
83100	(VECTOR SETQ NAME:OF:CLASS ANY1)
83200	
83300	(THIS WOULD NORMALLY BE DONE BY SYSTEM, NOT BY USER .... T
83400	(THE ASSIGNMENT WHICH SET NAME:OF:CLASS ,NAMELY (COMMENT HER IS THE FLOW
83500	** ASSIGNMENT, WHICH SHOULD ACTUALLY BE SET
83600	BY THE FLOW:PRECEDED ROUTINE) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF N
83700	**AME:OF:CLASS BE PREAD IN AT THIS POINT IN
83800	THE PROGRAM FLOW? USER...)
83900	NO
84000	
84100	AHA!!!! I'VE RESOLVED IT MYSELF!!! NO NEED TO INTERACT WITH THE SLOW
84200	USER CHANNEL AFTER ALL!!!
84300	
84400	MOVE CURSOR TO TAKE:HOLD:OF:9
84500	
84600	
84700	PUP IS NOW GOING TO ENCODE THE PIECE 
84800	  (PROGN (COMMENT NOTHING MUCH TO DO HERE; JUST ONE SIMPLE ASSIGNMENT TO
84900	** AN ALREADY EXISITNG VALUE)
85000	         (SET ARG1 OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS))
85100	
85200	
85300	OF THE FUNCTION TAKE:HOLD:OF:9 INTO LISP.   FUNCTION NAMES WILL
85400	BE QUERIED IN PREORDER, AS NEEDED.
85500	
85600	
85700	DRAW A LINE FROM THE FUNCTION CALL  (TAKE:HOLD:OF:9 NAME:OF:CLASS) OF TH
85800	**E FUNCTION TAKE:HOLD:OF:9 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY
85900	**:
86000	
86100	(TAKE:HOLD:OF:9
86200	  (NLAMBDA (ARG1)
86300	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME:OF:CLASS
86400	**)
86500	    (PROGN (COMMENT NOTHING MUCH TO DO HERE; JUST ONE SIMPLE ASSIGNMENT 
86600	**TO AN ALREADY EXISITNG VALUE)
86700	           (SET ARG1 OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS))))
86800	
86900	GC: 8
87000	27069, 27069 FREE WORDS
87100	(TAKE:HOLD:OF:9 redefined)
87200	
87300	MOVE CURSOR TO (VECTOR COMPLEX:MODIFY:STRUCTURE:10 TYPE OF (VECTOR COMPL
87400	**EX:MODIFY:STRUCTURE))
87500	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
87600	**N:(MIGHT THE MODIFICATION DEPEND UPON THE
87700	RESULTS -- PRESULT -- OF OUR GUESS AND ON SOME PARTS OF THE INPUT -- ELE
87800	**MENT -- AS WELL AS DEPENDING ON THE TRUE CLASS
87900	NAME -- NAME:OF:CLASS ?????)SINCE THE DECISION IS BOOLEAN, JUST ANSWER Y
88000	**ES OR NO.
88100	SHOULD I DISCUSS RAMIFICATIONS?NO
88200	
88300	NOW TYPE YOUR ANSWER: YES
88400	
88500	GC: 30
88600	390, 390 FREE WORDS
88700	
88800	OK, READY TO MOVE ON NOW.
88900	
89000	MOVE CURSOR TO COMPLEX:MODIFY:STRUCTURE:10
89100	
89200	
89300	PUP IS NOW GOING TO ENCODE THE PIECE 
89400	  (NLSETQ (EVAL (TUPLE APPLY* (COLON:BACK (LIST ARG1 ARG3 (QUOTE MODIFY:
89500	**STRUCTURE)))
89600	                       (TUPLE SOME:PART:OF:14 ARG2)
89700	                       (TUPLE QUOTE SET:OF:RULES))))
89800	
89900	
90000	OF THE FUNCTION COMPLEX:MODIFY:STRUCTURE:10 INTO LISP.   FUNCTION NAMES 
90100	**WILL
90200	BE QUERIED IN PREORDER, AS NEEDED.
90300	
90400	
90500	DRAW A LINE FROM THE FUNCTION CALL  (COMPLEX:MODIFY:STRUCTURE:10 NAME:OF
90600	**:CLASS ELEMENT:6 PRESULT) OF THE FUNCTION COMPLEX:MODIFY:STRUCTURE:10 
90700	**TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
90800	
90900	(COMPLEX:MODIFY:STRUCTURE:10
91000	  (LAMBDA (ARG1 ARG2 ARG3)
91100	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME:OF:CLASS
91200	**)
91300	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS ELEMENT:6)
91400	    (COMMENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS PRESULT)
91500	    (NLSETQ (EVAL (TUPLE APPLY*(COLON:BACK (LIST ARG1 ARG3 (QUOTE MODIFY
91600	**:STRUCTURE)))
91700	                         (TUPLE SOME:PART:OF:14 ARG2)
91800	                         (TUPLE QUOTE SET:OF:RULES))))))
91900	(COMPLEX:MODIFY:STRUCTURE:10 redefined)
92000	
92100	MOVE CURSOR TO (VECTOR TAKE:HOLD:OF:11 TYPE OF (VECTOR TAKE:HOLD:OF))
92200	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
92300	**ION:((SETQQ QUALIFIER BRAND) (FLOW:PRECEDED
92400	(VECTOR SETQ (@ ARG1) ANY1)) (SETQQ QUALIFIER CORRECT) (PUPRINT (TUPLE T
92500	**HE ASSIGNMENT WHICH SET (@ ARG1) ,NAMELY (@
92600	FLOW:ASSIGNMENT) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF (@ ARG1) BE PR
92700	**EAD IN AT THIS POINT IN THE PROGRAM FLOW?
92800	USER...)) (MEMBER (PREAD) (VECTOR NIL NO N)) T)(ABOVE, ARG1 REFERS TO NA
92900	**ME:OF:CLASS ;ALSO, PLEASE IGNORE THE THIRD
93000	'CHOICE'; IT IS ONLY FOR ME TO LOOK AT)
93100	
93200	FLOW:PRECEDED ISNT IN YET.
93300	LOOK AT ARGUMENT AND ANSWER T OR NIL:
93400	(VECTOR SETQ NAME:OF:CLASS ANY1)
93500	
93600	(THIS WOULD NORMALLY BE DONE BY SYSTEM, NOT BY USER .... T
93700	(THE ASSIGNMENT WHICH SET NAME:OF:CLASS ,NAMELY (COMMENT HER IS THE FLOW
93800	** ASSIGNMENT, WHICH SHOULD ACTUALLY BE SET
93900	BY THE FLOW:PRECEDED ROUTINE) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF N
94000	**AME:OF:CLASS BE PREAD IN AT THIS POINT IN
94100	THE PROGRAM FLOW? USER...)
94200	YES
94300	
94400	AHA!!!! I'VE RESOLVED IT MYSELF!!! NO NEED TO INTERACT WITH THE SLOW
94500	USER CHANNEL AFTER ALL!!!
94600	
94700	MOVE CURSOR TO TAKE:HOLD:OF:11
94800	
94900	
95000	PUP IS NOW GOING TO ENCODE THE PIECE 
95100	  (PROGN (PUPRINT (COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS))
95200	         (SET ARG1 (PREAD))
95300	         T)
95400	
95500	
95600	OF THE FUNCTION TAKE:HOLD:OF:11 INTO LISP.   FUNCTION NAMES WILL
95700	BE QUERIED IN PREORDER, AS NEEDED.
95800	
95900	
96000	DRAW A LINE FROM THE FUNCTION CALL  (TAKE:HOLD:OF:11 NAME:OF:CLASS) OF T
96100	**HE FUNCTION TAKE:HOLD:OF:11 TO THIS NEW PIECE OF CODE, WHICH IS ITS BO
96200	**DY:
96300	
96400	(TAKE:HOLD:OF:11
96500	  (NLAMBDA (ARG1)
96600	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME:OF:CLASS
96700	**)
96800	    (PROGN (PUPRINT (COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS))
96900	           (SET ARG1 (PREAD))
97000	           T)))
97100	(TAKE:HOLD:OF:11 redefined)
97200	
97300	MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
97400	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
97500	**N:(HERE WE LAY THE SKELETON OF ANY PARSE ROUTINE)
97600	GC: 8
97700	26442, 26442 FREE WORDS
97800	
97900	MOVE CURSOR TO PARSE:15
98000	
98100	
98200	PUP IS NOW GOING TO ENCODE THE PIECE 
98300	  (PROGN ARG1 (COMMENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 INT
98400	**O NOTING ITS INSTANTIATION HERE IN THE CODE)
98500	         (COMMENT HERE WE MIGHT INITIALIZE THIS PARSE'S TREE)
98600	         (COMMENT HERE WE MIGHT INITIALIZE THIS PARSE'S LIST OF RULES US
98700	**ED)
98800	         (SETQ ARG1 (SOME:PART:OF:14 ARG1))
98900	         (COMMENT PERHAPS A LOOP GOES HERE, ENCLOSING (COMMENT SOME JOIN
99000	**ED FORWARD/BACKWARD PARSE CALLS)))
99100	
99200	
99300	OF THE FUNCTION PARSE:15 INTO LISP.   FUNCTION NAMES WILL
99400	BE QUERIED IN PREORDER, AS NEEDED.
99500	
99600	
99700	DRAW A LINE FROM THE FUNCTION CALL  (PARSE:15 ELEMENT:6) OF THE FUNCTION
99800	** PARSE:15 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
99900	
     

00100	(PARSE:15
00200	  (LAMBDA (ARG1)
00300	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6)
00400	    (PROGN ARG1 (COMMENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 I
00500	**NTO NOTING ITS INSTANTIATION HERE IN THE CODE)
00600	           (COMMENT HERE WE MIGHT INITIALIZE THIS PARSE'S TREE)
00700	           (COMMENT HERE WE MIGHT INITIALIZE THIS PARSE'S LIST OF RULES 
00800	**USED)
00900	           (SETQ ARG1 (SOME:PART:OF:14 ARG1))
01000	           (COMMENT PERHAPS A LOOP GOES HERE, ENCLOSING (COMMENT SOME JO
01100	**INED FORWARD/BACKWARD PARSE CALLS)))))
01200	
01300	GC: 8
01400	24721, 24721 FREE WORDS
01500	(PARSE:15 redefined)
01600	
01700	MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
01800	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
01900	**N:(DO WE PARSE BOTH FORWARDS AND BACKWARDS)
02000	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
02100	SHOULD I DISCUSS RAMIFICATIONS?NO
02200	
02300	NOW TYPE YOUR ANSWER: YES
02400	
02500	
02600	TYPE A DIGIT, AS FOLLOWS:
02700	 1  FORWARD.  IF THIS FAILS, THEN TRY BACKWARD.
02800	 2  BACKWARD. IF THIS FAILS, THEN TRY FORWARD.
02900	 3  SIMULTANEOUSLY, TRY BOTH UNTIL ONE SUCCEEDS OR BOTH FAIL.
03000	
03100	USER: 1
03200	(COMMENT WE LOOK OVER THE PARSE:15 CODE AGAIN.)
03300	
03400	OK, READY TO MOVE ON NOW.
03500	
03600	MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
03700	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
03800	**N:(DO WE PARSE TO/FROM ALL LEGAL STRINGS,
03900	RATHER THAN SIMPLY FROM 'S')SINCE THE DECISION IS BOOLEAN, JUST ANSWER Y
04000	**ES OR NO.
04100	SHOULD I DISCUSS RAMIFICATIONS?NO
04200	
04300	NOW TYPE YOUR ANSWER: YES
04400	
04500	IS SET:OF:LEGAL:STRINGS PROBABLY GOING TO EXIST? YES
04600	(COMMENT WE LOOK OVER THE NEW PARSE:15 CODE)
04700	
04800	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
04900	I DON'T KNOW ANY NAMES FOR (VECTOR FOREACH), SO YOU'LL HAVE TO
05000	TYPE A BRAND NEW NAME IN TO ME. 
05100	USER: NIL
05200	
05300	THE NAME CHOSEN IS FOREACH:16
05400	
05500	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE:FORWARD)
05600	I DON'T KNOW ANY NAMES FOR (VECTOR PARSE:FORWARD), SO YOU'LL HAVE TO
05700	TYPE A BRAND NEW NAME IN TO ME. 
05800	USER: NIL
05900	
06000	THE NAME CHOSEN IS PARSE:FORWARD:17
06100	
06200	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE:BACKWARD)
06300	I DON'T KNOW ANY NAMES FOR (VECTOR PARSE:BACKWARD), SO YOU'LL HAVE TO
06400	TYPE A BRAND NEW NAME IN TO ME. 
06500	USER: NIL
06600	
06700	THE NAME CHOSEN IS PARSE:BACKWARD:18
06800	
06900	OK, READY TO MOVE ON NOW.
07000	
07100	GC: 30
07200	389, 389 FREE WORDS
07300	
07400	MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
07500	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
07600	**N:(DO WE INITIALIZE AND MAINTAIN A LIST OF
07700	THE RULES USED DURING THE PARSE?)SINCE THE DECISION IS BOOLEAN, JUST ANS
07800	**WER YES OR NO.
07900	SHOULD I DISCUSS RAMIFICATIONS?NO
08000	
08100	NOW TYPE YOUR ANSWER: YES
08200	
08300	OK, READY TO MOVE ON NOW.
08400	
08500	MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
08600	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
08700	**N:(DO WE INITIALIZE AND MAINTAIN A PARSE TREE?)
08800	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
08900	SHOULD I DISCUSS RAMIFICATIONS?NO
09000	
09100	NOW TYPE YOUR ANSWER: YES
09200	
09300	OK, READY TO MOVE ON NOW.
09400	(COMMENT S1 IS NOT A BEING YET)
09500	(COMMENT SET:OF:LEGAL:STRINGS IS NOT A BEING YET)
09600	
09700	MOVE CURSOR TO (VECTOR FOREACH:16 TYPE OF (VECTOR FOREACH))
09800	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
09900	**N:(I ASSUME THAT I STOP AFTER EXAMINING ALL
10000	POSSIBLE:NAMES:OF:CLASS IN SET:OF:POSSIBLE:NAMES:OF:CLASS ; DO I ALSO ST
10100	**OP AFTER SOME CONDITION 'C' BECOMES TRUE?)
10200	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
10300	SHOULD I DISCUSS RAMIFICATIONS?NO
10400	
10500	NOW TYPE YOUR ANSWER: YES
10600	
10700	PLEASE TYPE IN A PREDICATE EQUIVALENT TO THIS UNTIL CONDITION 'C'.
10800	USER: (TYPING IN ]  WILL MEAN THAT THE CONDITION IS THATRESULT:1
10900	 IS NONNULL.)  USER: NIL
11000	
11100	OK, READY TO MOVE ON NOW.
11200	
11300	MOVE CURSOR TO FOREACH:16
11400	
11500	
11600	PUP IS NOW GOING TO ENCODE THE PIECE 
11700	  (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1)
11800	         (COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:ST
11900	**RINGS)
12000	         (COMMENT IN ALL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (CO
12100	**MMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL)
12200	                                                                  (COMME
12300	**NT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL)))
12400	         (PROG (RESULT:1)
12500	               (SETQ EVAL:ARG3 (EVAL ARG3))
12600	               LABEL:2
12700	               (COND ((NULL EVAL:ARG3)
12800	                      (SET ARG1 FAILURE:VALUE)
12900	                      (RETURN EXHAUSTION:VALUE)))
13000	               (SET ARG1 (CAR EVAL:ARG3))
13100	               (SETQ EVAL:ARG3 (CDR EVAL:ARG3))
13200	               (SETQ RESULT:1 (EVAL ARG5))
13300	               (COND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE))
13400	                     (T (GO LABEL:2)))
13500	               (COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL
13600	** CONDITION VALUE WAS LEFT UNDEFINED)))
13700	
13800	
13900	OF THE FUNCTION FOREACH:16 INTO LISP.   FUNCTION NAMES WILL
14000	BE QUERIED IN PREORDER, AS NEEDED.
14100	
14200	
14300	DRAW A LINE FROM THE FUNCTION CALL  (FOREACH:16 S1 IN SET:OF:LEGAL:STRIN
14400	**GS DO (OR (PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (PARSE:BACKWARD:18 S
14500	**1 ARG1 BPARSE:LEVEL))) OF THE FUNCTION FOREACH:16 TO THIS NEW PIECE OF
14600	** CODE, WHICH IS ITS BODY:
14700	
14800	(FOREACH:16
14900	  (NLAMBDA (ARG1 DUMMY:ARGUMENT:2 ARG3 DUMMY:ARGUMENT:1 ARG5)
15000	    (COMMENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:
15100	**STRINGS)
15200	    (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1)
15300	           (COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:
15400	**STRINGS)
15500	           (COMMENT IN ALL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (
15600	**COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL)
15700	                                                                       (
15800	**COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL))
15900	             )
16000	           (PROG (RESULT:1)
16100	                 (SETQ EVAL:ARG3 (EVAL ARG3))
16200	             LABEL:2
16300	                 (COND
16400	                   ((NULL EVAL:ARG3)
16500	                     (SET ARG1 FAILURE:VALUE)
16600	                     (RETURN EXHAUSTION:VALUE)))
16700	                 (SET ARG1 (CAR EVAL:ARG3))
16800	                 (SETQ EVAL:ARG3 (CDR EVAL:ARG3))
16900	                 (SETQ RESULT:1 (EVAL ARG5))
17000	                 (COND
17100	                   (RESULT:1 (RETURN UNTIL:CONDITION:VALUE))
17200	                   (T (GO LABEL:2)))
17300	                 (COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNT
17400	**IL CONDITION VALUE WAS LEFT UNDEFINED)))))
17500	(FOREACH:16 redefined)
17600	
17700	GC: 8
17800	24871, 24871 FREE WORDS
17900	(COMMENT ARG1 IS NOT A BEING YET)
18000	(COMMENT FPARSE:LEVEL IS NOT A BEING YET)
18100	
18200	MOVE CURSOR TO (VECTOR PARSE:FORWARD:17 TYPE OF (VECTOR PARSE:FORWARD))
18300	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
18400	**N:(THIS IS THE SKELETON FOR PARSING IN THIS
18500	DIRECTION)
18600	MOVE CURSOR TO (VECTOR PARSE:FORWARD:17 TYPE OF (VECTOR PARSE:FORWARD))
18700	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
18800	**N:(SHOULD WE IMPLEMENT ERROR RECOVERY IN ANY
18900	FANCY WAY)
19000	MOVE CURSOR TO PARSE:FORWARD:17
19100	
19200	
19300	PUP IS NOW GOING TO ENCODE THE PIECE 
19400	  (COND ((EQUAL ARG1 ARG2)
19500	         T)
19600	        ((ZEROP ARG3)
19700	         NIL)
19800	        (T (FOREACH R IN SET:OF:RULES DO (FOREACH AR IN (APPLYRULE R ARG
19900	**1)
20000	                                                  DO
20100	                                                  (PROG1 (PARSE:FORWARD 
20200	**AR ARG2 (SUB1 ARG3))
20300	                                                         (COMMENT PARSE 
20400	**TREE MAINTENANCE MIGHT GO HERE)
20500	                                                         (COMMENT RULES 
20600	**USED MAINTENANCE MIGHT GO HERE))))))
20700	
20800	
20900	OF THE FUNCTION PARSE:FORWARD:17 INTO LISP.   FUNCTION NAMES WILL
21000	BE QUERIED IN PREORDER, AS NEEDED.
21100	
21200	GC: 8
21300	24610, 24610 FREE WORDS
21400	
21500	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
21600	IS THIS THE SAME AS A (VECTOR FOREACH) WHICH WE'VE ALREADY SEEN AND NAME
21700	**D?
21800	
21900	USER: YES
22000	
22100	SINCE FOREACH:16 IS THE ONLY NAME FOR (VECTOR FOREACH),
22200	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
22300	YOU WANT. AM I RIGHT?
22400	USER: YES
22500	
22600	THE NAME CHOSEN IS FOREACH:16
22700	
22800	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
22900	IS THIS THE SAME AS A (VECTOR FOREACH) WHICH WE'VE ALREADY SEEN AND NAME
23000	**D?
23100	
23200	USER: YES
23300	
23400	SINCE FOREACH:16 IS THE ONLY NAME FOR (VECTOR FOREACH),
23500	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
23600	YOU WANT. AM I RIGHT?
23700	USER: YES
23800	
23900	THE NAME CHOSEN IS FOREACH:16
24000	
24100	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR APPLYRULE)
24200	I DON'T KNOW ANY NAMES FOR (VECTOR APPLYRULE), SO YOU'LL HAVE TO
24300	TYPE A BRAND NEW NAME IN TO ME. 
24400	USER: NIL
24500	
24600	THE NAME CHOSEN IS APPLYRULE:19
24700	
24800	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE:FORWARD)
24900	
25000	GC: 30
25100	376, 376 FREE WORDS
25200	IS THIS THE SAME AS A (VECTOR PARSE:FORWARD) WHICH WE'VE ALREADY SEEN AN
25300	**D NAMED?
25400	
25500	USER: YES
25600	
25700	SINCE PARSE:FORWARD:17 IS THE ONLY NAME FOR (VECTOR PARSE:FORWARD),
25800	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
25900	YOU WANT. AM I RIGHT?
26000	USER: YES
26100	
26200	THE NAME CHOSEN IS PARSE:FORWARD:17
27700	
27800	DRAW A LINE FROM THE FUNCTION CALL  (PARSE:FORWARD:17 AR ARG2 (SUB1 ARG3
27900	**)) OF THE FUNCTION PARSE:FORWARD:17 TO THIS NEW PIECE OF CODE, WHICH I
28000	**S ITS BODY:
28100	
28200	(PARSE:FORWARD:17
28300	  (LAMBDA (ARG1 ARG2 ARG3)
28400	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS AR)
28500	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS NIL)
28600	    (COMMENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS (SUB1 ARG3))
28700	    (COND
28800	      ((EQUAL ARG1 ARG2)
28900	        T)
29000	      ((ZEROP ARG3)
29100	        NIL)
29200	      (T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR IN (APPLYRULE:1
29300	**9 R ARG1)
29400	                                             DO (PROG1 (PARSE:FORWARD:17
29500	** AR ARG2 (SUB1 ARG3))
29600	                                                       (COMMENT PARSE TR
29700	**EE MAINTENANCE MIGHT GO HERE)
29800	                                                       (COMMENT RULES US
29900	**ED MAINTENANCE MIGHT GO HERE))))))))
30000	(PARSE:FORWARD:17 redefined)
30100	
30200	MOVE CURSOR TO (VECTOR PARSE:FORWARD:17 TYPE OF (VECTOR PARSE:FORWARD))
30300	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
30400	**N:(IS THERE A LIST OF RULES USED TO MAINTAIN?)
30500	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
30600	SHOULD I DISCUSS RAMIFICATIONS?NO
30700	
30800	NOW TYPE YOUR ANSWER: 
30900	HA!!  I HAVE A HINT WHICH RESOLVES THIS FOR ME!!
31000	(COMMENT WE ARE AGAIN LOOKING AT THE CODE FOR PARSE:FORWARD:17)
31100	
31200	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
31300	I DON'T KNOW ANY NAMES FOR (VECTOR CONDITIONAL:INSERTION), SO YOU'LL HAV
31400	**E TO
31500	TYPE A BRAND NEW NAME IN TO ME. 
31600	USER: NIL
31700	
31800	THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
31900	
32000	OK, READY TO MOVE ON NOW.
32100	
32200	MOVE CURSOR TO (VECTOR PARSE:FORWARD:17 TYPE OF (VECTOR PARSE:FORWARD))
32300	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
32400	**N:(IS THERE A PARSE TREE TO MAINTAIN?)
32500	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
32600	SHOULD I DISCUSS RAMIFICATIONS?NO
32700	
32800	NOW TYPE YOUR ANSWER: 
32900	HA!!  I HAVE A HINT WHICH RESOLVES THIS FOR ME!!
33000	(COMMENT WE ARE AGAIN LOOKING AT THE CODE FOR PARSE:FORWARD:17)
33100	
33200	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
33300	IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
33400	** SEEN AND NAMED?
33500	
33600	USER: YES
33700	
33800	SINCE CONDITIONAL:INSERTION:20 IS THE ONLY NAME FOR (VECTOR CONDITIONAL:
33900	**INSERTION),
34000	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
34100	YOU WANT. AM I RIGHT?
34200	USER: YES
34300	
34400	THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
34500	
34600	OK, READY TO MOVE ON NOW.
34700	(COMMENT R IS NOT A BEING YET)
34800	
34900	GC: 8
35000	24086, 24086 FREE WORDS
35100	
35200	DEBUG F1 FDESC UNKNOWN  (VECTOR PROGN ARG1 (VECTOR COMMENT THIS APPEARAN
35300	**CE OF ARG1 IS SIMPLY TO ENSURE THAT A COMMENT ABOUT ITS BINDING GETS S
35400	**TUCK IN HERE SOMEWHERE IN THE META:CODE) (VECTOR ALLSUBSTS (VECTOR COP
35500	**Y (VECTOR EVAL (VECTOR GETP RULE RIGHT:SIDE))) (VECTOR COPY (VECTOR EV
35600	**AL (VECTOR GETP RULE LEFT:SIDE))) (VECTOR COPY ARG2)))
35700	
35800	MOVE CURSOR TO APPLYRULE:19
35900	
36000	
36100	PUP IS NOW GOING TO ENCODE THE PIECE 
36200	  (PROGN ARG1
36300	         (COMMENT THIS APPEARANCE OF ARG1 IS SIMPLY TO ENSURE THAT A COM
36400	**MENT ABOUT ITS BINDING GETS STUCK IN HERE 
36500	                  SOMEWHERE IN THE META:CODE)
36600	         (ALLSUBSTS (COPY (EVAL (GETP RULE RIGHT:SIDE)))
36700	                    (COPY (EVAL (GETP RULE LEFT:SIDE)))
36800	                    (COPY ARG2)))
36900	
37000	
37100	OF THE FUNCTION APPLYRULE:19 INTO LISP.   FUNCTION NAMES WILL
37200	BE QUERIED IN PREORDER, AS NEEDED.
37300	
37400	
37500	DRAW A LINE FROM THE FUNCTION CALL  (APPLYRULE:19 R ARG1) OF THE FUNCTIO
37600	**N APPLYRULE:19 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
37700	
37800	(APPLYRULE:19
37900	  (LAMBDA (ARG1 ARG2)
38000	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS R)
38100	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS NIL)
38200	    (PROGN ARG1
38300	           (COMMENT THIS APPEARANCE OF ARG1 IS SIMPLY TO ENSURE THAT A C
38400	**OMMENT ABOUT ITS BINDING GETS STUCK
38500	              IN HERE SOMEWHERE IN THE META:CODE)
38600	           (ALLSUBSTS (COPY (EVAL (GETP RULE RIGHT:SIDE)))
38700	                      (COPY (EVAL (GETP RULE LEFT:SIDE)))
38800	                      (COPY ARG2)))))
38900	(APPLYRULE:19 redefined)
39000	(COMMENT BPARSE:LEVEL IS NOT A BEING YET)
39100	
39200	MOVE CURSOR TO (VECTOR PARSE:BACKWARD:18 TYPE OF (VECTOR PARSE:BACKWARD)
39300	**)
39400	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
39500	**N:(THIS IS THE SKELETON FOR PARSING IN THIS
39600	DIRECTION)
39700	GC: 30
39800	389, 389 FREE WORDS
39900	
40000	MOVE CURSOR TO PARSE:BACKWARD:18
40100	
40200	
40300	PUP IS NOW GOING TO ENCODE THE PIECE 
40400	  (COND ((EQUAL ARG1 ARG2)
40500	         T)
40600	        ((ZEROP ARG3)
40700	         NIL)
40800	        (T (FOREACH R IN SET:OF:RULES DO (FOREACH AR IN (APPLYRULE (ANTI
40900	**RULE R)
41000	                                                                   ARG2)
41100	                                                  DO
41200	                                                  (PROG1 (PARSE:BACKWARD
41300	** ARG1 AR (SUB1 ARG3))
41400	                                                         (COMMENT PARSE 
41500	**TREE MAINTENANCE MIGHT GO HERE)
41600	                                                         (COMMENT RULES 
41700	**USED MAINTENANCE MIGHT GO HERE))))))
41800	
41900	
42000	OF THE FUNCTION PARSE:BACKWARD:18 INTO LISP.   FUNCTION NAMES WILL
42100	BE QUERIED IN PREORDER, AS NEEDED.
42200	
42300	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
42400	IS THIS THE SAME AS A (VECTOR FOREACH) WHICH WE'VE ALREADY SEEN AND NAME
42500	**D?
42600	
42700	USER: YES
42800	
42900	SINCE FOREACH:16 IS THE ONLY NAME FOR (VECTOR FOREACH),
43000	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
43100	YOU WANT. AM I RIGHT?
43200	USER: YES
43300	
43400	THE NAME CHOSEN IS FOREACH:16
43500	
43600	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
43700	IS THIS THE SAME AS A (VECTOR FOREACH) WHICH WE'VE ALREADY SEEN AND NAME
43800	**D?
43900	
44000	USER: YES
44100	
44200	SINCE FOREACH:16 IS THE ONLY NAME FOR (VECTOR FOREACH),
44300	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
44400	YOU WANT. AM I RIGHT?
44500	USER: YES
44600	
44700	THE NAME CHOSEN IS FOREACH:16
44800	
44900	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR APPLYRULE)
45000	IS THIS THE SAME AS A (VECTOR APPLYRULE) WHICH WE'VE ALREADY SEEN AND NA
45100	**MED?
45200	
45300	USER: YES
45400	
45500	SINCE APPLYRULE:19 IS THE ONLY NAME FOR (VECTOR APPLYRULE),
45600	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
45700	YOU WANT. AM I RIGHT?
45800	USER: YES
45900	
46000	THE NAME CHOSEN IS APPLYRULE:19
46100	
46200	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE:BACKWARD)
46300	IS THIS THE SAME AS A (VECTOR PARSE:BACKWARD) WHICH WE'VE ALREADY SEEN A
46400	**ND NAMED?
46500	
46600	USER: YES
46700	
46800	SINCE PARSE:BACKWARD:18 IS THE ONLY NAME FOR (VECTOR PARSE:BACKWARD),
46900	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
47000	YOU WANT. AM I RIGHT?
47100	USER: YES
47200	
47300	THE NAME CHOSEN IS PARSE:BACKWARD:18
47400	
47500	GC: 8
47600	23309, 23309 FREE WORDS
47700	
47800	
47900	DRAW A LINE FROM THE FUNCTION CALL  (PARSE:BACKWARD:18 ARG1 AR (SUB1 ARG
48000	**3)) OF THE FUNCTION PARSE:BACKWARD:18 TO THIS NEW PIECE OF CODE, WHICH
48100	** IS ITS BODY:
48200	
48300	(PARSE:BACKWARD:18
48400	  (LAMBDA (ARG1 ARG2 ARG3)
48500	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NIL)
48600	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS AR)
48700	    (COMMENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS (SUB1 ARG3))
48800	    (COND
48900	      ((EQUAL ARG1 ARG2)
49000	        T)
49100	      ((ZEROP ARG3)
49200	        NIL)
49300	      (T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR IN (APPLYRULE:1
49400	**9 (ANTIRULE R)
49500	                                                                        
49600	**  ARG2)
49700	                                             DO (PROG1 (PARSE:BACKWARD:1
49800	**8 ARG1 AR (SUB1 ARG3))
49900	                                                       (COMMENT PARSE TR
50000	**EE MAINTENANCE MIGHT GO HERE)
50100	                                                       (COMMENT RULES US
50200	**ED MAINTENANCE MIGHT GO HERE))))))))
50300	(PARSE:BACKWARD:18 redefined)
50400	
50500	MOVE CURSOR TO (VECTOR PARSE:BACKWARD:18 TYPE OF (VECTOR PARSE:BACKWARD)
50600	**)
50700	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
50800	**N:(IS THERE A LIST OF RULES USED TO MAINTAIN?)
50900	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
51000	SHOULD I DISCUSS RAMIFICATIONS?NO
51100	
51200	NOW TYPE YOUR ANSWER: 
51300	HA!!  I HAVE A HINT WHICH RESOLVES THIS FOR ME!!
51400	(COMMENT WE ARE AGAIN LOOKING AT THE CODE FOR PARSE:BACKWARD:18)
51500	
51600	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
51700	IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
51800	** SEEN AND NAMED?
51900	
52000	USER: YES
52100	
52200	SINCE CONDITIONAL:INSERTION:20 IS THE ONLY NAME FOR (VECTOR CONDITIONAL:
52300	**INSERTION),
52400	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
52500	YOU WANT. AM I RIGHT?
52600	USER: YES
52700	
52800	THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
52900	
53000	OK, READY TO MOVE ON NOW.
53100	
53200	GC: 30
53400	388, 388 FREE WORDS
56200	
56300	(0:19:12 CPU TIME)
56400	(0:0:0 OF IT IN DWIM)
58300	
58400	MOVE CURSOR TO (VECTOR PARSE:BACKWARD:18 TYPE OF (VECTOR PARSE:BACKWARD)
58500	**)
58600	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
58700	**N:(IS THERE A PARSE TREE TO MAINTAIN?)
58800	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
58900	SHOULD I DISCUSS RAMIFICATIONS?NO
59000	
59100	NOW TYPE YOUR ANSWER: 
59200	HA!!  I HAVE A HINT WHICH RESOLVES THIS FOR ME!!
59300	(COMMENT WE ARE AGAIN LOOKING AT THE CODE FOR PARSE:BACKWARD:18)
59400	
59500	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
59600	IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
59700	** SEEN AND NAMED?
59800	
59900	USER: YES
60000	
60100	SINCE CONDITIONAL:INSERTION:20 IS THE ONLY NAME FOR (VECTOR CONDITIONAL:
60200	**INSERTION),
60300	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
60400	YOU WANT. AM I RIGHT?
60500	USER: YES
60600	
60700	THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
60800	
60900	OK, READY TO MOVE ON NOW.
61000	
61100	MOVE CURSOR TO (VECTOR CONDITIONAL:INSERTION:20 TYPE OF (VECTOR CONDITIO
61200	**NAL:INSERTION))
61300	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
61400	**N:(DO I, AT THIS POINT, CONDITIONALLY INSERT
61500	(ANTIRULE R) ,OR A SIMILAR ELEMENT, SUCH AS ARG1 INTO THE DATA STRUCTURE
61600	** (EVAL ARG2) ??? PLEASE RESPOND YES OR NO;
61700	IF YOU SAY 'YES', THEN I WILL PROBABLY HAVE TO ASK YOU SOME MORE QUESTIO
61800	**NS.)
61900	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
62000	SHOULD I DISCUSS RAMIFICATIONS?NO
62100	
62200	NOW TYPE YOUR ANSWER: YES
62300	
62400	
62500	NOW WE MUST KNOW 2 THINGS:
62600	(1) WHAT WE INSERT
62700	(2) UNDER WHAT CONDITION WE DO THE INSERTION
62800	
62900	NOTES ABOUT (1):  IF WE ARE INSERTING AN ALREADY EXISTING THING, THEN 
63000	JUST GIVEITS NAME; IF IT IS NEW, GIVE AN EXPRESSION INDICATING HOW WE 
63100	GET IT, PERHAPS IN TERMS OF ARG1.
63200	
63300	(RECALL THAT HERE, ARG1 IS INSTANTIATED AS (ANTIRULE R))
63400	
63500	
63600	NOTES ABOUT (2): YOU MAY REFER TO THE RESULT OF (1) AS RESULT:2
63700	. THIS WILL BE ESPECIALLY USEFUL IF (1) IS NOT SIMPLY
63800	AN OLD NAME.  ALSO, WE DO NOT ASSUME THAT PART OF THE
63900	CONDITION (2) IS THE FACT THAT RESULT:2
64000	
64100	IS ALREADY IN THE LIST. THIS NEEDNT BE
64200	RESTATED. TYPNG SIMPLY ']' WILL CAUSE ME TO ASSUME YOU WANT THE CON-
64300	DITION: (RESULT:2 ISNT NIL)
64400	
64500	
64600	USER: (1) :  ARG1
64700	
64800	USER: (2): NIL
64900	
65000	OK, READY TO MOVE ON NOW.
65100	
65200	MOVE CURSOR TO CONDITIONAL:INSERTION:20
65300	
65400	
65500	PUP IS NOW GOING TO ENCODE THE PIECE 
65600	  (PROGN (SETQ RESULT:2 ARG1)
65700	         NIL
65800	         (COND ((AND (NOT (MEMBER RESULT:2 (EVAL ARG2)))
65900	                     RESULT:2)
66000	                (SET ARG2 (SETUNION (EVAL ARG2)
66100	                                    (LIST ARG1))))
66200	               (T (SETQ RESULT:2 NIL))))
66300	
66400	
66500	OF THE FUNCTION CONDITIONAL:INSERTION:20 INTO LISP.   FUNCTION NAMES WIL
66600	**L
66700	BE QUERIED IN PREORDER, AS NEEDED.
66800	
66900	
67000	DRAW A LINE FROM THE FUNCTION CALL  (CONDITIONAL:INSERTION:20 (ANTIRULE 
67100	**R) (QUOTE RULES:USED)) OF THE FUNCTION CONDITIONAL:INSERTION:20 TO THI
67200	**S NEW PIECE OF CODE, WHICH IS ITS BODY:
67300	
67400	(CONDITIONAL:INSERTION:20
67500	  (LAMBDA (ARG1 ARG2)
67600	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (ANTIRULE R))
67700	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE RULES:
67800	**USED))
67900	    (PROGN (SETQ RESULT:2 ARG1)
68000	           NIL
68100	           (COND
68200	             ((AND (NOT (MEMBER RESULT:2 (EVAL ARG2)))
68300	                   RESULT:2)
68400	               (SET ARG2 (SETUNION (EVAL ARG2)
68500	                                   (LIST ARG1))))
68600	             (T (SETQ RESULT:2 NIL))))))
68700	(CONDITIONAL:INSERTION:20 redefined)
68800	
68900	GC: 8
69000	22126, 22126 FREE WORDS
69100	
69200	MOVE CURSOR TO (VECTOR LEGAL:ILLEGAL:MODIFY:STRUCTURE TYPE OF (VECTOR MA
69300	**JOR:MODIFY:STRUCTURE))
69400	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
69500	**ON:(MODIFY:STRUCTURE MODIFY:UNTIL MODIFY:SOME
69600	EXAMINE:STRUCTURE)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUBS
69700	**ET OF: 
69800	(A .... MODIFY:STRUCTURE)
69900	(B .... MODIFY:UNTIL)
70000	(C .... MODIFY:SOME)
70100	(D .... EXAMINE:STRUCTURE)
70200	
70300	FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
70400	SHOULD I DISCUSS RAMIFICATIONS?NO
70500	
70600	USER: (A C)
70700	
70800	MOVE CURSOR TO LEGAL:ILLEGAL:MODIFY:STRUCTURE
70900	
71000	
71100	PUP IS NOW GOING TO ENCODE THE PIECE 
71200	  (PROGN (MODIFY:STRUCTURE ARG1 ARG2)
71300	         (MODIFY:SOME ARG1 ARG2))
71400	
71500	
71600	OF THE FUNCTION LEGAL:ILLEGAL:MODIFY:STRUCTURE INTO LISP.   FUNCTION NAM
71700	**ES WILL
71800	BE QUERIED IN PREORDER, AS NEEDED.
71900	
72000	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:STRUCTURE)
72100	I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:STRUCTURE), SO YOU'LL HAVE TO
72200	TYPE A BRAND NEW NAME IN TO ME. 
72300	USER: NIL
72400	
72500	THE NAME CHOSEN IS MODIFY:STRUCTURE:21
72600	
72700	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:SOME)
72800	I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:SOME), SO YOU'LL HAVE TO
72900	TYPE A BRAND NEW NAME IN TO ME. 
73000	USER: NIL
73100	
73200	THE NAME CHOSEN IS MODIFY:SOME:22
73300	
73400	
73500	DRAW A LINE FROM THE FUNCTION CALL  (LEGAL:ILLEGAL:MODIFY:STRUCTURE (VEC
73600	**TOR TUPLE SOME:PART:OF:14 ARG2) (QUOTE SET:OF:RULES)) OF THE FUNCTION 
73700	**LEGAL:ILLEGAL:MODIFY:STRUCTURE TO THIS NEW PIECE OF CODE, WHICH IS ITS
73800	** BODY:
73900	
74000	(LEGAL:ILLEGAL:MODIFY:STRUCTURE
74100	  (LAMBDA (ARG1 ARG2)
74200	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
74300	** SOME:PART:OF:14 ARG2))
74400	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
74500	**:RULES))
74600	    (PROGN (MODIFY:STRUCTURE:21 ARG1 ARG2)
74700	           (MODIFY:SOME:22 ARG1 ARG2))))
74800	(LEGAL:ILLEGAL:MODIFY:STRUCTURE redefined)
74900	(COMMENT ARG2 IS NOT A BEING YET)
75000	
75100	MOVE CURSOR TO (VECTOR MODIFY:SOME:22 TYPE OF (VECTOR MODIFY:SOME))
75200	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
75300	**N:(WE GATHER UP ALL RELEVANT SUBSTRUCTURES
75400	AND THEN MODIFY THEM)
75500	MOVE CURSOR TO MODIFY:SOME:22
75600	
75700	
75800	PUP IS NOW GOING TO ENCODE THE PIECE 
75900	  (MAPC MODIFY:SET (FUNCTION (LAMBDA (ILS)
76000	                                     (COND ((MODIFY:CONDITION ILS)
76100	                                            (MODIFY:STRUCTURE ARG1 ARG2)
76200	**)))))
76300	
76400	
76500	OF THE FUNCTION MODIFY:SOME:22 INTO LISP.   FUNCTION NAMES WILL
76600	BE QUERIED IN PREORDER, AS NEEDED.
76700	
76800	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:STRUCTURE)
76900	
77000	GC: 30
77100	385, 385 FREE WORDS
77200	IS THIS THE SAME AS A (VECTOR MODIFY:STRUCTURE) WHICH WE'VE ALREADY SEEN
77300	** AND NAMED?
77400	
77500	USER: NO
77600	I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:STRUCTURE), SO YOU'LL HAVE TO
77700	TYPE A BRAND NEW NAME IN TO ME. 
77800	USER: NIL
77900	
78000	THE NAME CHOSEN IS MODIFY:STRUCTURE:23
78100	
78200	
78300	DRAW A LINE FROM THE FUNCTION CALL  (MODIFY:SOME:22 ARG1 ARG2) OF THE FU
78400	**NCTION MODIFY:SOME:22 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
78500	
78600	(MODIFY:SOME:22
78700	  (LAMBDA (ARG1 ARG2)
78800	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
78900	** SOME:PART:OF:14 ARG2))
79000	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
79100	**:RULES))
79200	    (MAPC MODIFY:SET (FUNCTION (LAMBDA (ILS)
79300	              (COND
79400	                ((MODIFY:CONDITION ILS)
79500	                  (MODIFY:STRUCTURE:23 ARG1 ARG2))))))))
79600	(MODIFY:SOME:22 redefined)
79700	
79800	MOVE CURSOR TO (VECTOR ILLEGAL:LEGAL:MODIFY:STRUCTURE TYPE OF (VECTOR MA
79900	**JOR:MODIFY:STRUCTURE))
80000	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
80100	**ON:(MODIFY:STRUCTURE MODIFY:UNTIL MODIFY:SOME
80200	EXAMINE:STRUCTURE)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUBS
80300	**ET OF: 
80400	(A .... MODIFY:STRUCTURE)
80500	(B .... MODIFY:UNTIL)
80600	(C .... MODIFY:SOME)
80700	(D .... EXAMINE:STRUCTURE)
80800	
80900	FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
81000	SHOULD I DISCUSS RAMIFICATIONS?NO
81100	
81200	USER: (B)
81300	
81400	MOVE CURSOR TO ILLEGAL:LEGAL:MODIFY:STRUCTURE
81500	
81600	
81700	PUP IS NOW GOING TO ENCODE THE PIECE 
81800	  (PROGN (MODIFY:UNTIL ARG1 ARG2))
81900	
82000	
82100	OF THE FUNCTION ILLEGAL:LEGAL:MODIFY:STRUCTURE INTO LISP.   FUNCTION NAM
82200	**ES WILL
82300	BE QUERIED IN PREORDER, AS NEEDED.
82400	
82500	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:UNTIL)
82600	I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:UNTIL), SO YOU'LL HAVE TO
82700	TYPE A BRAND NEW NAME IN TO ME. 
82800	USER: NIL
82900	
83000	THE NAME CHOSEN IS MODIFY:UNTIL:24
83100	
83200	
83300	DRAW A LINE FROM THE FUNCTION CALL  (ILLEGAL:LEGAL:MODIFY:STRUCTURE (VEC
83400	**TOR TUPLE SOME:PART:OF:14 ARG2) (QUOTE SET:OF:RULES)) OF THE FUNCTION 
83500	**ILLEGAL:LEGAL:MODIFY:STRUCTURE TO THIS NEW PIECE OF CODE, WHICH IS ITS
83600	** BODY:
83700	
83800	(ILLEGAL:LEGAL:MODIFY:STRUCTURE
83900	  (LAMBDA (ARG1 ARG2)
84000	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
84100	** SOME:PART:OF:14 ARG2))
84200	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
84300	**:RULES))
84400	    (PROGN (MODIFY:UNTIL:24 ARG1 ARG2))))
84500	(ILLEGAL:LEGAL:MODIFY:STRUCTURE redefined)
84600	
84700	GC: 8
84800	21159, 21159 FREE WORDS
84900	
85000	MOVE CURSOR TO (VECTOR MODIFY:UNTIL:24 TYPE OF (VECTOR MODIFY:UNTIL))
85100	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
85200	**N:(WE REPEATEDLY MODIFY STRUCTURE)
85300	
85400	MOVE CURSOR TO MODIFY:UNTIL:24
85500	
85600	
85700	PUP IS NOW GOING TO ENCODE THE PIECE 
85800	  (REPEATEDLY (MODIFY:STRUCTURE ARG1 ARG2))
85900	
86000	
86100	OF THE FUNCTION MODIFY:UNTIL:24 INTO LISP.   FUNCTION NAMES WILL
86200	BE QUERIED IN PREORDER, AS NEEDED.
86300	
86400	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:STRUCTURE)
86500	IS THIS THE SAME AS A (VECTOR MODIFY:STRUCTURE) WHICH WE'VE ALREADY SEEN
86600	** AND NAMED?
86700	
86800	USER: NO
86900	I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:STRUCTURE), SO YOU'LL HAVE TO
87000	TYPE A BRAND NEW NAME IN TO ME. 
87100	USER: NIL
87200	
87300	THE NAME CHOSEN IS MODIFY:STRUCTURE:25
87400	
87500	
87600	DRAW A LINE FROM THE FUNCTION CALL  (MODIFY:UNTIL:24 ARG1 ARG2) OF THE F
87700	**UNCTION MODIFY:UNTIL:24 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
87800	
87900	(MODIFY:UNTIL:24
88000	  (LAMBDA (ARG1 ARG2)
88100	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
88200	** SOME:PART:OF:14 ARG2))
88300	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
88400	**:RULES))
88500	    (PROG NIL
88600	      LABEL:3
88700	          (MODIFY:STRUCTURE:25 ARG1 ARG2)
88800	          (GO LABEL:3)
88900	          (COMMENT INFINITE LOOP IN THIS PROG))))
89000	(MODIFY:UNTIL:24 redefined)
89100	
89200	GC: 8
89300	20824, 20824 FREE WORDS
89400	
89500	MOVE CURSOR TO (VECTOR MODIFY:STRUCTURE:21 TYPE OF (VECTOR MODIFY:STRUCT
89600	**URE))
89700	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
89800	**ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
89900	COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
90000	**SET OF: 
90100	(A .... CONDITIONAL:INSERTION)
90200	(B .... CONDITIONAL:DELETION)
90300	(C .... COMPLEX:ALTERATION)
90400	
90500	FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
90600	SHOULD I DISCUSS RAMIFICATIONS?NO
90700	
90800	USER: (A)
90900	
91000	MOVE CURSOR TO MODIFY:STRUCTURE:21
91100	
91200	
91300	PUP IS NOW GOING TO ENCODE THE PIECE 
91400	  (PROGN (CONDITIONAL:INSERTION ARG1 ARG2))
91500	
91600	
91700	OF THE FUNCTION MODIFY:STRUCTURE:21 INTO LISP.   FUNCTION NAMES WILL
91800	BE QUERIED IN PREORDER, AS NEEDED.
91900	
92000	GC: 28
92100	302, 302 FREE WORDS
92200	
92300	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
92400	IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
92500	** SEEN AND NAMED?
92600	
92700	USER: NO
92800	I DON'T KNOW ANY NAMES FOR (VECTOR CONDITIONAL:INSERTION), SO YOU'LL HAV
92900	**E TO
93000	TYPE A BRAND NEW NAME IN TO ME. 
93100	USER: NIL
93200	
93300	THE NAME CHOSEN IS CONDITIONAL:INSERTION:26
93400	
93500	GC: 30
93600	389, 389 FREE WORDS
93700	
93800	
93900	DRAW A LINE FROM THE FUNCTION CALL  (MODIFY:STRUCTURE:21 ARG1 ARG2) OF T
94000	**HE FUNCTION MODIFY:STRUCTURE:21 TO THIS NEW PIECE OF CODE, WHICH IS IT
94100	**S BODY:
94200	
94300	(MODIFY:STRUCTURE:21
94400	  (LAMBDA (ARG1 ARG2)
94500	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
94600	** SOME:PART:OF:14 ARG2))
94700	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
94800	**:RULES))
94900	    (PROGN (CONDITIONAL:INSERTION:26 ARG1 ARG2))))
95000	(MODIFY:STRUCTURE:21 redefined)
95100	
95200	MOVE CURSOR TO (VECTOR CONDITIONAL:INSERTION:26 TYPE OF (VECTOR CONDITIO
95300	**NAL:INSERTION))
95400	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
95500	**N:(DO I, AT THIS POINT, CONDITIONALLY INSERT
95600	(VECTOR TUPLE SOME:PART:OF:14 ARG2) ,OR A SIMILAR ELEMENT, SUCH AS ARG1 
95700	**INTO THE DATA STRUCTURE (EVAL ARG2) ??? PLEASE
95800	RESPOND YES OR NO; IF YOU SAY 'YES', THEN I WILL PROBABLY HAVE TO ASK YO
95900	**U SOME MORE QUESTIONS.)
96000	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
96100	SHOULD I DISCUSS RAMIFICATIONS?NO
96200	
96300	NOW TYPE YOUR ANSWER: YES
96400	
96500	
96600	NOW WE MUST KNOW 2 THINGS:
96700	(1) WHAT WE INSERT
96800	(2) UNDER WHAT CONDITION WE DO THE INSERTION
96900	
97000	NOTES ABOUT (1):  IF WE ARE INSERTING AN ALREADY EXISTING THING, THEN 
97100	JUST GIVEITS NAME; IF IT IS NEW, GIVE AN EXPRESSION INDICATING HOW WE 
97200	GET IT, PERHAPS IN TERMS OF ARG1.
97300	
97400	(RECALL THAT HERE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14
97500	** ARG2))
97600	
97700	
97800	NOTES ABOUT (2): YOU MAY REFER TO THE RESULT OF (1) AS RESULT:3
97900	. THIS WILL BE ESPECIALLY USEFUL IF (1) IS NOT SIMPLY
98000	AN OLD NAME.  ALSO, WE DO NOT ASSUME THAT PART OF THE
98100	CONDITION (2) IS THE FACT THAT RESULT:3
98200	
98300	IS ALREADY IN THE LIST. THIS NEEDNT BE
98400	RESTATED. TYPNG SIMPLY ']' WILL CAUSE ME TO ASSUME YOU WANT THE CON-
98500	DITION: (RESULT:3 ISNT NIL)
98600	
98700	
98800	USER: (1) :  (THOSE LEGAL STRINGS WHICH MATCH ARG1)
98900	
99000	USER: (2): NIL
99100	
99200	OK, READY TO MOVE ON NOW.
99300	
99400	MOVE CURSOR TO CONDITIONAL:INSERTION:26
99500	
99600	
99700	PUP IS NOW GOING TO ENCODE THE PIECE 
99800	  (PROGN (SETQ RESULT:3 (MAPCONC SET:OF:LEGAL:STRINGS (FUNCTION (LAMBDA 
99900	**(LS)
     

00100	                                                                        
00200	**(COND ((PATTERN:MATCH ARG1 LS)))))))
00300	         NIL
00400	         (COND ((AND (NOT (MEMBER RESULT:3 (EVAL ARG2)))
00500	                     RESULT:3)
00600	                (SET ARG2 (SETUNION (EVAL ARG2)
00700	                                    RESULT:3)))
00800	               (T (SETQ RESULT:3 NIL))))
00900	
01000	
01100	OF THE FUNCTION CONDITIONAL:INSERTION:26 INTO LISP.   FUNCTION NAMES WIL
01200	**L
01300	BE QUERIED IN PREORDER, AS NEEDED.
01400	
01500	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PATTERN:MATCH)
01600	I DON'T KNOW ANY NAMES FOR (VECTOR PATTERN:MATCH), SO YOU'LL HAVE TO
01700	TYPE A BRAND NEW NAME IN TO ME. 
01800	USER: NIL
01900	
02000	THE NAME CHOSEN IS PATTERN:MATCH:27
02100	
02200	GC: 8
02300	20174, 20174 FREE WORDS
02400	
02500	
02600	DRAW A LINE FROM THE FUNCTION CALL  (CONDITIONAL:INSERTION:26 ARG1 ARG2)
02700	** OF THE FUNCTION CONDITIONAL:INSERTION:26 TO THIS NEW PIECE OF CODE, W
02800	**HICH IS ITS BODY:
02900	
03000	(CONDITIONAL:INSERTION:26
03100	  (LAMBDA (ARG1 ARG2)
03200	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
03300	** SOME:PART:OF:14 ARG2))
03400	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
03500	**:RULES))
03600	    (PROGN (SETQ RESULT:3 (MAPCONC SET:OF:LEGAL:STRINGS (FUNCTION (LAMBD
03700	**A (LS)
03800	                                       (COND
03900	                                         ((PATTERN:MATCH:27 ARG1 LS)))))
04000	**))
04100	           NIL
04200	           (COND
04300	             ((AND (NOT (MEMBER RESULT:3 (EVAL ARG2)))
04400	                   RESULT:3)
04500	               (SET ARG2 (SETUNION (EVAL ARG2)
04600	                                   RESULT:3)))
04700	             (T (SETQ RESULT:3 NIL))))))
04800	(CONDITIONAL:INSERTION:26 redefined)
04900	(COMMENT LS IS NOT A BEING YET)
05000	
05100	GC: 8
05200	19888, 19888 FREE WORDS
05300	
05400	MOVE CURSOR TO (VECTOR PATTERN:MATCH:27 TYPE OF (VECTOR PATTERN:MATCH))
05500	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
05600	**N:(SET UP THE SKELETON OF THE MATCH)
05700	
05800	MOVE CURSOR TO PATTERN:MATCH:27
05900	
06000	
06100	PUP IS NOW GOING TO ENCODE THE PIECE 
06200	  (PROGN (ELIM:COMMON:HEAD ARG1 ARG2 (QUOTE ARG1)
06300	                           (QUOTE ARG2))
06400	         (ELIM:COMMON:TAIL ARG1 ARG2 (QUOTE ARG1)
06500	                           (QUOTE ARG2))
06600	         (COND ((IS:OF:TYPE ARG1 ARG2 (COMMENT OK TO INCLUDE THIS COMBO 
06700	**AS PLAUSIBLE NEW RULE))
06800	                (LIST (LIST ARG1 ARG2)
06900	                      (LIST ARG2 ARG1)))))
07000	
07100	
07200	OF THE FUNCTION PATTERN:MATCH:27 INTO LISP.   FUNCTION NAMES WILL
07300	BE QUERIED IN PREORDER, AS NEEDED.
07400	
07500	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR IS:OF:TYPE)
07600	IS THIS THE SAME AS A (VECTOR IS:OF:TYPE) WHICH WE'VE ALREADY SEEN AND N
07700	**AMED?
07800	
07900	USER: NO
08000	I DON'T KNOW ANY NAMES FOR (VECTOR IS:OF:TYPE), SO YOU'LL HAVE TO
08100	TYPE A BRAND NEW NAME IN TO ME. 
08200	USER: NIL
08300	
08400	THE NAME CHOSEN IS IS:OF:TYPE:28
08500	
08600	
08700	DRAW A LINE FROM THE FUNCTION CALL  (PATTERN:MATCH:27 ARG1 LS) OF THE FU
08800	**NCTION PATTERN:MATCH:27 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
08900	
09000	(PATTERN:MATCH:27
09100	  (LAMBDA (ARG1 ARG2)
09200	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
09300	** SOME:PART:OF:14 ARG2))
09400	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS LS)
09500	    (PROGN (ELIM:COMMON:HEAD ARG1 ARG2 (QUOTE ARG1)
09600	                             (QUOTE ARG2))
09700	           (ELIM:COMMON:TAIL ARG1 ARG2 (QUOTE ARG1)
09800	                             (QUOTE ARG2))
09900	           (COND
10000	             ((IS:OF:TYPE:28 ARG1 ARG2 (COMMENT OK TO INCLUDE THIS COMBO
10100	** AS PLAUSIBLE NEW RULE))
10200	               (LIST (LIST ARG1 ARG2)
10300	                     (LIST ARG2 ARG1)))))))
10400	
10500	GC: 8
10600	19489, 19489 FREE WORDS
10700	(PATTERN:MATCH:27 redefined)
10800	
10900	MOVE CURSOR TO (VECTOR PATTERN:MATCH:27 TYPE OF (VECTOR PATTERN:MATCH))
11000	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
11100	**N:(PATCH UP THE BODY OF THE MATCHING FUNCTION
11200	HERE)
11300	GC: 8
11400	19144, 19144 FREE WORDS
11500	
11600	MOVE CURSOR TO (VECTOR IS:OF:TYPE:28 TYPE OF (VECTOR IS:OF:TYPE))
11700	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
11800	**SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
11900	PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
12000	** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
12100	TO IT)SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
12200	TYPE IN THE DEFINITION OF IS:OF:TYPE:28
12300	GC: 30
12500	362, 362 FREE WORDS
13900	
14000	
14100	SINCE THIS IS A PREDICATE, THE EXPRESSION YOU TYPE IN SHOULD BE A
14200	LOGICAL EXPRESSION, WHICH IS TRUE IF ARG1 IS OF
14300	THE NIL TYPE, AND SHOULD BE FALSE IF IT ISNT OF
14400	THAT TYPE.
14500	PUPRIN1
14600	
14700	SHOULD I DISCUSS RAMIFICATIONS?NO
14800	
14900	USER: (ARG1 AND ARG2 AND THERE ARE LESS THAN 8 THINGS IN ARG1 , ARG2)
15000	
15100	MOVE CURSOR TO (VECTOR IS:OF:TYPE:28 TYPE OF (VECTOR IS:OF:TYPE))
15200	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
15300	**SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
15400	PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
15500	** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
15600	TO IT)
15700	GC: 8
15800	19183, 19183 FREE WORDS
15900	
16000	MOVE CURSOR TO IS:OF:TYPE:28
16100	
16200	
16300	PUP IS NOW GOING TO ENCODE THE PIECE 
16400	  (AND ARG1 ARG2 (LESSP (LENGTH (APPEND ARG1 ARG2))
16500	                        8))
16600	
16700	
16800	OF THE FUNCTION IS:OF:TYPE:28 INTO LISP.   FUNCTION NAMES WILL
16900	BE QUERIED IN PREORDER, AS NEEDED.
17000	
17100	
17200	DRAW A LINE FROM THE FUNCTION CALL  (IS:OF:TYPE:28 ARG1 ARG2 (COMMENT OK
17300	** TO INCLUDE THIS COMBO AS PLAUSIBLE NEW RULE)) OF THE FUNCTION IS:OF:T
17400	**YPE:28 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
17500	
17600	(IS:OF:TYPE:28
17700	  (LAMBDA (ARG1 ARG2 DUMMY:ARGUMENT:1)
17800	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
17900	** SOME:PART:OF:14 ARG2))
18000	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS LS)
18100	    (AND ARG1 ARG2 (LESSP (LENGTH (APPEND ARG1 ARG2))
18200	                          8))))
18300	
18400	IS (MATCH (TUPLE COMMENT FRAG1) ARG2) STILL THE PROPER EXPLICIT
18500	ARGS CHECK FOR THE FUNCTION IS:OF:TYPE:28?
18600	USER: NO
18700	
18800	WHAT IS THE CHECK, THEN? (I SUGGEST 'T')
18900	USER: T
19000	(IS:OF:TYPE:28 redefined)
19100	
19200	GC: 8
19300	18857, 18857 FREE WORDS
19400	
19500	MOVE CURSOR TO (VECTOR MODIFY:STRUCTURE:23 TYPE OF (VECTOR MODIFY:STRUCT
19600	**URE))
19700	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
19800	**ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
19900	COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
20000	**SET OF: 
20100	(A .... CONDITIONAL:INSERTION)
20200	(B .... CONDITIONAL:DELETION)
20300	(C .... COMPLEX:ALTERATION)
20400	
20500	FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
20600	SHOULD I DISCUSS RAMIFICATIONS?NO
20700	
20800	USER: (B)
20900	
21000	MOVE CURSOR TO MODIFY:STRUCTURE:23
21100	
21200	
21300	PUP IS NOW GOING TO ENCODE THE PIECE 
21400	  (PROGN (CONDITIONAL:DELETION ARG1 ARG2))
21500	
21600	
21700	OF THE FUNCTION MODIFY:STRUCTURE:23 INTO LISP.   FUNCTION NAMES WILL
21800	BE QUERIED IN PREORDER, AS NEEDED.
21900	
22000	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:DELETION)
22100	I DON'T KNOW ANY NAMES FOR (VECTOR CONDITIONAL:DELETION), SO YOU'LL HAVE
22200	** TO
22300	TYPE A BRAND NEW NAME IN TO ME. 
22400	USER: NIL
22500	
22600	THE NAME CHOSEN IS CONDITIONAL:DELETION:29
22700	
22800	GC: 8
22900	18793, 18793 FREE WORDS
23000	
23100	
23200	DRAW A LINE FROM THE FUNCTION CALL  (MODIFY:STRUCTURE:23 ARG1 ARG2) OF T
23300	**HE FUNCTION MODIFY:STRUCTURE:23 TO THIS NEW PIECE OF CODE, WHICH IS IT
23400	**S BODY:
23500	
23600	(MODIFY:STRUCTURE:23
23700	  (LAMBDA (ARG1 ARG2)
23800	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
23900	** SOME:PART:OF:14 ARG2))
24000	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
24100	**:RULES))
24200	    (PROGN (CONDITIONAL:DELETION:29 ARG1 ARG2))))
24300	(MODIFY:STRUCTURE:23 redefined)
24400	
24500	GC: 8
24600	18555, 18555 FREE WORDS
24700	
24800	MOVE CURSOR TO (VECTOR CONDITIONAL:DELETION:29 TYPE OF (VECTOR CONDITION
24900	**AL:DELETION))
25000	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
25100	**N:(DO I, AT THIS POINT, CONDITIONALLY DELETE
25200	(VECTOR TUPLE SOME:PART:OF:14 ARG2) ,OR A SIMILAR ELEMENT, INTO THE DATA
25300	** STRUCTURE (EVAL ARG2) ??? PLEASE RESPOND
25400	YES OR NO; IF YOU SAY 'YES', THEN I WILL PROBABLY HAVE TO ASK YOU SOME M
25500	**ORE QUESTIONS.)
25600	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
25700	SHOULD I DISCUSS RAMIFICATIONS?NO
25800	
25900	NOW TYPE YOUR ANSWER: YES
26000	
26100	
26200	NOW WE MUST KNOW 2 THINGS:
26300	(1) WHAT WE DELETE
26400	(2) UNDER WHAT CONDITION WE DO THE DELETION
26500	
26600	NOTES ABOUT (1):  IF WE ARE DELETING AN ALREADY EXISTING THING, THEN 
26700	JUST GIVEITS NAME; IF IT IS NEW, GIVE AN EXPRESSION INDICATING HOW WE 
26800	GET IT, PERHAPS IN TERMS OF ARG1.
26900	
27000	(RECALL THAT HERE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14
27100	** ARG2))
27200	
27300	
27400	NOTES ABOUT (2): YOU MAY REFER TO THE RESULT OF (1) AS RESULT:4
27500	, IF (1) IS
27600	NOT SIMPLY AN OLD NAME.
27700	ALSO, WE ASSUME THAT PART OF THE CONDITION (2) IS THE FACT THAT RESULT:4
27800	
27900	 IS NOT ALREADY IN THE LIST. THIS NEED NOT BE
28000	RESTATED BY THE USER. 
28100	TYPING SIMPLY ']' WILL CAUSE ME TO ASSUME YOU WANT THE CONDITION:
28200	(RESULT:4 ISNT NIL)
28300	
28400	
28500	USER: (1) :  (RULES:USED WHICH IS IN RESULT:3)
28600	
28700	USER: (2): NIL
28800	
28900	OK, READY TO MOVE ON NOW.
29000	
29100	MOVE CURSOR TO CONDITIONAL:DELETION:29
29200	
29300	
29400	PUP IS NOW GOING TO ENCODE THE PIECE 
29500	  (PROGN (SETQ RESULT:4 (SETINTERSECTION RULES:USED RESULT:3))
29600	         (COND (RESULT:4 (SET ARG2 (SETDIFFERENCE (EVAL ARG2)
29700	                                                  RESULT:4)))
29800	               (T (SETQ RESULT:4 NIL))))
29900	
30000	
30100	OF THE FUNCTION CONDITIONAL:DELETION:29 INTO LISP.   FUNCTION NAMES WILL
30200	BE QUERIED IN PREORDER, AS NEEDED.
30300	
30400	
30500	DRAW A LINE FROM THE FUNCTION CALL  (CONDITIONAL:DELETION:29 ARG1 ARG2) 
30600	**OF THE FUNCTION CONDITIONAL:DELETION:29 TO THIS NEW PIECE OF CODE, WHI
30700	**CH IS ITS BODY:
30800	
30900	(CONDITIONAL:DELETION:29
31000	  (LAMBDA (DUMMY:ARGUMENT:1 ARG2)
31100	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
31200	**:RULES))
31300	    (PROGN (SETQ RESULT:4 (SETINTERSECTION RULES:USED RESULT:3))
31400	           (COND
31500	             (RESULT:4 (SET ARG2 (SETDIFFERENCE (EVAL ARG2)
31600	                                                RESULT:4)))
31700	             (T (SETQ RESULT:4 NIL))))))
31800	
31900	GC: 8
32000	17432, 17432 FREE WORDS
32100	(CONDITIONAL:DELETION:29 redefined)
32200	
32300	MOVE CURSOR TO (VECTOR MODIFY:STRUCTURE:25 TYPE OF (VECTOR MODIFY:STRUCT
32400	**URE))
32500	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
32600	**ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
32700	COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
32800	**SET OF: 
32900	(A .... CONDITIONAL:INSERTION)
33000	(B .... CONDITIONAL:DELETION)
33100	(C .... COMPLEX:ALTERATION)
33200	
33300	FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
33400	SHOULD I DISCUSS RAMIFICATIONS?NO
33500	
33600	USER: (B)
33700	
33800	MOVE CURSOR TO MODIFY:STRUCTURE:25
33900	
34000	
34100	PUP IS NOW GOING TO ENCODE THE PIECE 
34200	  (PROGN (CONDITIONAL:DELETION ARG1 ARG2))
34300	
34400	
34500	OF THE FUNCTION MODIFY:STRUCTURE:25 INTO LISP.   FUNCTION NAMES WILL
34600	BE QUERIED IN PREORDER, AS NEEDED.
34700	
34800	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:DELETION)
34900	IS THIS THE SAME AS A (VECTOR CONDITIONAL:DELETION) WHICH WE'VE ALREADY 
35000	**SEEN AND NAMED?
35100	
35200	USER: NO
35300	
35400	GC: 30
35500	 Running at 22457  Load av. =   1.68, USED 0:45:05.1 IN 1:26:21
35600	342, 342 FREE WORDS
35700	I DON'T KNOW ANY NAMES FOR (VECTOR CONDITIONAL:DELETION), SO YOU'LL HAVE
35800	** TO
35900	TYPE A BRAND NEW NAME IN TO ME. 
36000	USER: NIL
36100	
36200	THE NAME CHOSEN IS CONDITIONAL:DELETION:30
36300	
36400	
36500	DRAW A LINE FROM THE FUNCTION CALL  (MODIFY:STRUCTURE:25 ARG1 ARG2) OF T
36600	**HE FUNCTION MODIFY:STRUCTURE:25 TO THIS NEW PIECE OF CODE, WHICH IS IT
36700	**S BODY:
36800	
36900	(MODIFY:STRUCTURE:25
37000	  (LAMBDA (ARG1 ARG2)
37100	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
37200	** SOME:PART:OF:14 ARG2))
37300	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
37400	**:RULES))
37500	    (PROGN (CONDITIONAL:DELETION:30 ARG1 ARG2))))
37600	(MODIFY:STRUCTURE:25 redefined)
37700	
37800	GC: 8
37900	17911, 17911 FREE WORDS
38000	
38100	MOVE CURSOR TO (VECTOR CONDITIONAL:DELETION:30 TYPE OF (VECTOR CONDITION
38200	**AL:DELETION))
38300	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
38400	**N:(DO I, AT THIS POINT, CONDITIONALLY DELETE
38500	(VECTOR TUPLE SOME:PART:OF:14 ARG2) ,OR A SIMILAR ELEMENT, INTO THE DATA
38600	** STRUCTURE (EVAL ARG2) ??? PLEASE RESPOND
38700	YES OR NO; IF YOU SAY 'YES', THEN I WILL PROBABLY HAVE TO ASK YOU SOME M
38800	**ORE QUESTIONS.)
38900	SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
39000	SHOULD I DISCUSS RAMIFICATIONS?NO
39100	
39200	NOW TYPE YOUR ANSWER: YES
39300	
39400	
39500	NOW WE MUST KNOW 2 THINGS:
39600	(1) WHAT WE DELETE
39700	(2) UNDER WHAT CONDITION WE DO THE DELETION
39800	
39900	NOTES ABOUT (1):  IF WE ARE DELETING AN ALREADY EXISTING THING, THEN 
40000	JUST GIVEITS NAME; IF IT IS NEW, GIVE AN EXPRESSION INDICATING HOW WE 
40100	GET IT, PERHAPS IN TERMS OF ARG1.
40200	
40300	(RECALL THAT HERE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14
40400	** ARG2))
40500	
40600	
40700	NOTES ABOUT (2): YOU MAY REFER TO THE RESULT OF (1) AS RESULT:5
40800	, IF (1) IS
40900	NOT SIMPLY AN OLD NAME.
41000	ALSO, WE ASSUME THAT PART OF THE CONDITION (2) IS THE FACT THAT RESULT:5
41100	
41200	 IS NOT ALREADY IN THE LIST. THIS NEED NOT BE
41300	RESTATED BY THE USER. 
41400	TYPING SIMPLY ']' WILL CAUSE ME TO ASSUME YOU WANT THE CONDITION:
41500	(RESULT:5 ISNT NIL)
41600	
41700	
41800	USER: (1) :  (ANY RULE ESPECIALLY ONE WHICH HAS JUST BEEN USED)
41900	
42000	USER: (2): NIL
42100	
42200	OK, READY TO MOVE ON NOW.
42300	
42400	MOVE CURSOR TO CONDITIONAL:DELETION:30
42500	
42600	
42700	PUP IS NOW GOING TO ENCODE THE PIECE 
42800	  (PROGN (SETQ RESULT:5 (RANDOMSELECT RULES:USED SET:OF:RULES))
42900	         (COND (RESULT:5 (SET ARG2 (SETDIFFERENCE (EVAL ARG2)
43000	                                                  (LIST RESULT:5))))
43100	               (T (SETQ RESULT:5 NIL))))
43200	
43300	
43400	OF THE FUNCTION CONDITIONAL:DELETION:30 INTO LISP.   FUNCTION NAMES WILL
43500	BE QUERIED IN PREORDER, AS NEEDED.
43600	
43700	GC: 8
43800	17749, 17749 FREE WORDS
43900	
44000	
44100	DRAW A LINE FROM THE FUNCTION CALL  (CONDITIONAL:DELETION:30 ARG1 ARG2) 
44200	**OF THE FUNCTION CONDITIONAL:DELETION:30 TO THIS NEW PIECE OF CODE, WHI
44300	**CH IS ITS BODY:
44400	
44500	(CONDITIONAL:DELETION:30
44600	  (LAMBDA (DUMMY:ARGUMENT:1 ARG2)
44700	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
44800	**:RULES))
44900	    (PROGN (SETQ RESULT:5 (RANDOMSELECT RULES:USED SET:OF:RULES))
45000	           (COND
45100	             (RESULT:5 (SET ARG2 (SETDIFFERENCE (EVAL ARG2)
45200	                                                (LIST RESULT:5))))
45300	             (T (SETQ RESULT:5 NIL))))))
45400	(CONDITIONAL:DELETION:30 redefined)
45500	
45600	MOVE CURSOR TO (VECTOR LEGAL:LEGAL:MODIFY:STRUCTURE TYPE OF (VECTOR MODI
45700	**FY:STRUCTURE))
45800	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
45900	**ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
46000	COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
46100	**SET OF: 
46200	(A .... CONDITIONAL:INSERTION)
46300	(B .... CONDITIONAL:DELETION)
46400	(C .... COMPLEX:ALTERATION)
46500	
46600	FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
46700	SHOULD I DISCUSS RAMIFICATIONS?NO
46800	
46900	USER: NIL
47000	
47100	MOVE CURSOR TO LEGAL:LEGAL:MODIFY:STRUCTURE
47200	
47300	
47400	PUP IS NOW GOING TO ENCODE THE PIECE 
47500	  (PROGN ARG1 ARG2
47600	         (COMMENT AT PRESENT WE HAVE NO BODY FOR THIS FUNCTION, BUT WE H
47700	**AVE FAITH THAT OTHER BEINGS WILL GIVE US 
47800	                  MEANING LATER ON))
47900	
48000	
48100	OF THE FUNCTION LEGAL:LEGAL:MODIFY:STRUCTURE INTO LISP.   FUNCTION NAMES
48200	** WILL
48300	BE QUERIED IN PREORDER, AS NEEDED.
48400	
48500	GC: 8
48600	17335, 17335 FREE WORDS
48700	
48800	
48900	DRAW A LINE FROM THE FUNCTION CALL  (LEGAL:LEGAL:MODIFY:STRUCTURE (VECTO
49000	**R TUPLE SOME:PART:OF:14 ARG2) (QUOTE SET:OF:RULES)) OF THE FUNCTION LE
49100	**GAL:LEGAL:MODIFY:STRUCTURE TO THIS NEW PIECE OF CODE, WHICH IS ITS BOD
49200	**Y:
49300	
49400	(LEGAL:LEGAL:MODIFY:STRUCTURE
49500	  (LAMBDA (ARG1 ARG2)
49600	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
49700	** SOME:PART:OF:14 ARG2))
49800	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
49900	**:RULES))
50000	    (PROGN ARG1 ARG2
50100	           (COMMENT AT PRESENT WE HAVE NO BODY
50200	              FOR THIS FUNCTION, BUT WE HAVE FAITH THAT OTHER BEINGS WIL
50300	**L GIVE US MEANING LATER ON))))
50400	(LEGAL:LEGAL:MODIFY:STRUCTURE redefined)
50500	
50600	MOVE CURSOR TO (VECTOR ILLEGAL:ILLEGAL:MODIFY:STRUCTURE TYPE OF (VECTOR 
50700	**MODIFY:STRUCTURE))
50800	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
50900	**ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
51000	COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
51100	**SET OF: 
51200	(A .... CONDITIONAL:INSERTION)
51300	(B .... CONDITIONAL:DELETION)
51400	(C .... COMPLEX:ALTERATION)
51500	
51600	FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
51700	SHOULD I DISCUSS RAMIFICATIONS?NO
51800	
51900	USER: NIL
52000	
52100	MOVE CURSOR TO ILLEGAL:ILLEGAL:MODIFY:STRUCTURE
52200	
52300	
52400	PUP IS NOW GOING TO ENCODE THE PIECE 
52500	  (PROGN ARG1 ARG2
52600	         (COMMENT AT PRESENT WE HAVE NO BODY FOR THIS FUNCTION, BUT WE H
52700	**AVE FAITH THAT OTHER BEINGS WILL GIVE US 
52800	                  MEANING LATER ON))
52900	
53000	
53100	OF THE FUNCTION ILLEGAL:ILLEGAL:MODIFY:STRUCTURE INTO LISP.   FUNCTION N
53200	**AMES WILL
53300	BE QUERIED IN PREORDER, AS NEEDED.
53400	
53500	
53600	DRAW A LINE FROM THE FUNCTION CALL  (ILLEGAL:ILLEGAL:MODIFY:STRUCTURE (V
53700	**ECTOR TUPLE SOME:PART:OF:14 ARG2) (QUOTE SET:OF:RULES)) OF THE FUNCTIO
53800	**N ILLEGAL:ILLEGAL:MODIFY:STRUCTURE TO THIS NEW PIECE OF CODE, WHICH IS
53900	** ITS BODY:
54000	
54100	(ILLEGAL:ILLEGAL:MODIFY:STRUCTURE
54200	  (LAMBDA (ARG1 ARG2)
54300	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
54400	** SOME:PART:OF:14 ARG2))
54500	    (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
54600	**:RULES))
54700	    (PROGN ARG1 ARG2
54800	           (COMMENT AT PRESENT WE HAVE NO BODY
54900	              FOR THIS FUNCTION, BUT WE HAVE FAITH THAT OTHER BEINGS WIL
55000	**L GIVE US MEANING LATER ON))))
55100	(ILLEGAL:ILLEGAL:MODIFY:STRUCTURE redefined)
55200	
55300	GC: 8
55400	16860, 16860 FREE WORDS
55500	
55600	MOVE CURSOR TO (VECTOR SOME:PART:OF:13 TYPE OF (VECTOR SOME:PART:OF))
55700	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
55800	**ION:((VECTOR WE GET THE SOME:PART:OF FUNCTION
55900	(CADR CHOICE) BY EXAMPLE I/O) (VECTOR WE GET THE SOME:PART:OF FUNCTION (
56000	**CADR CHOICE) BY TRANSLATING AN EXPLICITLY
56100	USER-PROVIDED SENTENCE) (ERROR!))(ABOVE, ARG1 REFERS TO (EVAL ARG1) ;ALS
56200	**O, PLEASE IGNORE THE THIRD 'CHOICE'; IT IS
56300	ONLY FOR ME TO LOOK AT)
56400	
56500	GC: 30
56600	300, 300 FREE WORDS
56700	
56800	
56900	SINCE THE DECISION IS DICHOTOMOUS, TYPE A 1  OR   A MEANS THAT  IS C(VEC
57000	**TOR WE GET THE SOME:PART:OF FUNCTION SOME:PART:OF:13 BY EXAMPLE I/O) I
57100	**S CORRECT.
57200	2 MEANS THAT (VECTOR WE GET THE SOME:PART:OF FUNCTION SOME:PART:OF:13 BY
57300	** TRANSLATING AN EXPLICITLY USER-PROVIDED SENTENCE) IS CORRECT.
57400	
57500	SHOULD I DISCUSS RAMIFICATIONS?NO
57600	
57700	USER: 2
57800	
57900	OK, NOW TYPE IN THE SENTENCE EQUIVALENT TO THE ACTION OF THE
58000	SOME:PART:OF:FUNCTION IN QUESTION
58100	
58200	USER: (THE FRONT PART OF ARG1)
58300	
58400	MOVE CURSOR TO SOME:PART:OF:13
58500	
58600	
58700	PUP IS NOW GOING TO ENCODE THE PIECE 
58800	  (CAR ARG1)
58900	
59000	
59100	OF THE FUNCTION SOME:PART:OF:13 INTO LISP.   FUNCTION NAMES WILL
59200	BE QUERIED IN PREORDER, AS NEEDED.
59300	
59400	
59500	DRAW A LINE FROM THE FUNCTION CALL  (SOME:PART:OF:13 (EVAL ARG1)) OF THE
59600	** FUNCTION SOME:PART:OF:13 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY
59700	**:
59800	
59900	(SOME:PART:OF:13
60000	  (LAMBDA (ARG1)
60100	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (EVAL ARG1))
60200	    (CAR ARG1)))
60300	(SOME:PART:OF:13 redefined)
60400	
60500	MOVE CURSOR TO (VECTOR SOME:PART:OF:14 TYPE OF (VECTOR SOME:PART:OF))
60600	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
60700	**ION:((VECTOR WE GET THE SOME:PART:OF FUNCTION
60800	(CADR CHOICE) BY EXAMPLE I/O) (VECTOR WE GET THE SOME:PART:OF FUNCTION (
60900	**CADR CHOICE) BY TRANSLATING AN EXPLICITLY
61000	USER-PROVIDED SENTENCE) (ERROR!))
61100	GC: 8
61200	16622, 16622 FREE WORDS
61300	(ABOVE, ARG1 REFERS TO ELEMENT:6 ;ALSO, PLEASE IGNORE THE THIRD 'CHOICE'
61400	**; IT IS ONLY FOR ME TO LOOK AT)
61500	
61600	
61700	SINCE THE DECISION IS DICHOTOMOUS, TYPE A 1  OR   A MEANS THAT  IS C(VEC
61800	**TOR WE GET THE SOME:PART:OF FUNCTION SOME:PART:OF:14 BY EXAMPLE I/O) I
61900	**S CORRECT.
62000	2 MEANS THAT (VECTOR WE GET THE SOME:PART:OF FUNCTION SOME:PART:OF:14 BY
62100	** TRANSLATING AN EXPLICITLY USER-PROVIDED SENTENCE) IS CORRECT.
62200	
62300	SHOULD I DISCUSS RAMIFICATIONS?NO
62400	
62500	USER: 1
62600	
62700	LEARN BY EXAMPLE  IS NOT IN YET; PLEASE TYPE IN WHAT IT SHOULD RETURN.
62800	ITS ARGUMENT VECTOR IS (VECTOR SOME:PART:OF SOME:PART:OF:14 ELEMENT:6 NI
62900	**L)   .    OK, TYPE IN ANSWER:
63000	USER: (CDR ARG1)
63100	
63200	MOVE CURSOR TO SOME:PART:OF:14
63300	
63400	
63500	PUP IS NOW GOING TO ENCODE THE PIECE 
63600	  (CDR ARG1)
63700	
63800	
63900	OF THE FUNCTION SOME:PART:OF:14 INTO LISP.   FUNCTION NAMES WILL
64000	BE QUERIED IN PREORDER, AS NEEDED.
64100	
64200	GC: 8
64300	16601, 16601 FREE WORDS
64400	
64500	
64600	DRAW A LINE FROM THE FUNCTION CALL  (SOME:PART:OF:14 ARG1) OF THE FUNCTI
64700	**ON SOME:PART:OF:14 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
64800	
64900	(SOME:PART:OF:14
65000	  (LAMBDA (ARG1)
65100	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6)
65200	    (CDR ARG1)))
65300	(SOME:PART:OF:14 redefined)
65400	
65500	GC: 30
65600	212, 212 FREE WORDS
65700	
65800	
65900	MOVE CURSOR TO FAILURE:VALUE WHICH IS LOCATED INSIDE (PROGN (COMMENT IN 
66000	**ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PROG
66100	**N (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1) (COMMENT IN ALL 
66200	**CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT IN ALL 
66300	**CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:17 
66400	**S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL)
66500	**)) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND ((NULL 
66600	**EVAL:ARG3) (SET ARG1 FAILURE:VALUE) (RETURN EXHAUSTION:VALUE))) (SET A
66700	**RG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (
66800	**EVAL ARG5)) (COND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LAB
66900	**EL:2))) (COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL COND
67000	**ITION VALUE WAS LEFT UNDEFINED))))
67100	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION FOREACH:16
67200	
67300	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
67400	     I NOTICE THAT WE HAVE LEFT FAILURE:VALUE UNDEFINED. IT IS LOCATED I
67500	**N
67600	     THE FUNCTION FOREACH:16.  IN OTHER WORDS, AT THE INSTANT WE KNOW 
67700	THAT (VECTOR WHEN NO S1 IN SET:OF:LEGAL:STRINGS SUFFICES, WE MUST BIND S
67800	**1 TO SOME SPECIAL VALUE TO DISTINGUISH IT FROM THE LAST 'SUCCESSFUL BI
67900	**NDING-- TO THE LAST ELEMENT OF SET:OF:LEGAL:STRINGS)
68000	
68100	  I SUSPECT THAT THE ANSWER IS (NIL OR A LITERAL SUCH AS FAIL FAILURE OR
68200	** NOTHING).
68300	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
68400	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
68500	 LATER.' GO AHEAD NOW
68600	USER: NIL
68700	
68800	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING FAILUR
68900	**E:VALUE IN FOREACH:16 UNDEFINED; WILL BE GOTTEN
69000	LATER; PROBABLY NIL OR A LITERAL SUCH AS FAIL FAILURE OR NOTHING SINCE (
69100	**WHEN NO S1 IN SET:OF:LEGAL:STRINGS SUFFICES,
69200	WE MUST BIND S1 TO SOME SPECIAL VALUE TO DISTINGUISH IT FROM THE LAST 'S
69300	**UCCESSFUL BINDING-- TO THE LAST ELEMENT OF
69400	SET:OF:LEGAL:STRINGS)) ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE SU
69500	**BSTITUTED NIL FOR FAILURE:VALUE THROUGHOUT
69600	THE FUNCTION FOREACH:16 .BY THE WAY, THIS WAS ONE OF MY SUGGESTIONS!! TH
69700	**E META:CODE WAS CHANGED FROM (PROGN (COMMENT
69800	IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PRO
69900	**GN (COMMENT IN ALL CALLS TO DATE, ARG1 IS
70000	BOUND TO S1) (COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGA
70100	**L:STRINGS) (COMMENT IN ALL CALLS TO DATE,
70200	ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LE
70300	**VEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 
70400	BPARSE:LEVEL))) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (C
70500	**OND ((NULL EVAL:ARG3) (SET ARG1 NIL) (RETURN
70600	EXHAUSTION:VALUE))) (SET ARG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL
70700	**:ARG3)) (SETQ RESULT:1 (EVAL ARG5)) (COND
70800	(RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMMENT AT 
70900	**THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL
71000	CONDITION VALUE WAS LEFT UNDEFINED)))) TO (PROGN (COMMENT IN ALL CALLS T
71100	**O DATE, ARG3 IS INSTANTIATED AS 
71200	SET:OF:LEGAL:STRINGS) (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUN
71300	**D TO S1) (COMMENT IN ALL CALLS TO DATE, ARG3
71400	IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT IN ALL CALLS TO DATE, ARG5 IS
71500	** BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:17
71600	S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL)))
71700	** (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3))
71800	LABEL:2 (COND ((NULL EVAL:ARG3) (SET ARG1 NIL) (RETURN EXHAUSTION:VALUE)
71900	**)) (SET ARG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3
72000	(CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL ARG5)) (COND (RESULT:1 (RETURN UNT
72100	**IL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMMENT
72200	AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL CONDITION VALUE WAS LEF
72300	**T UNDEFINED))))))
72400	
72500	
72600	GC: 30
72700	306, 306 FREE WORDS
72800	
72900	
73000	MOVE CURSOR TO EXHAUSTION:VALUE WHICH IS LOCATED INSIDE (PROGN (COMMENT 
73100	**IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (P
73200	**ROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1) (COMMENT IN A
73300	**LL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT IN A
73400	**LL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:
73500	**17 S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEV
73600	**EL))) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND ((NU
73700	**LL EVAL:ARG3) (SET ARG1 NIL) (RETURN EXHAUSTION:VALUE))) (SET ARG1 (CA
73800	**R EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL AR
73900	**G5)) (COND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LABEL:2)))
74000	** (COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL CONDITION V
74100	**ALUE WAS LEFT UNDEFINED))))
74200	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION FOREACH:16
74300	
74400	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
74500	     I NOTICE THAT WE HAVE LEFT EXHAUSTION:VALUE UNDEFINED. IT IS LOCATE
74600	**D IN
74700	     THE FUNCTION FOREACH:16.  IN OTHER WORDS, AT THE INSTANT WE KNOW 
74800	THAT (VECTOR NO EXISTING S1 IN SET:OF:LEGAL:STRINGS WILL SUFFICE. WE MUS
74900	**T KNOW WHAT VALUE TO RETURN.)
75000	
75100	  I SUSPECT THAT THE ANSWER IS (NIL).
75200	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
75300	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
75400	 LATER.' GO AHEAD NOW
75500	USER: NIL
75600	
75700	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING EXHAUS
75800	**TION:VALUE IN FOREACH:16 UNDEFINED; WILL BE
75900	GOTTEN LATER; PROBABLY NIL SINCE (NO EXISTING S1 IN SET:OF:LEGAL:STRINGS
76000	** WILL SUFFICE. WE MUST KNOW WHAT VALUE TO
76100	RETURN.)) ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE SUBSTITUTED NIL
76200	** FOR EXHAUSTION:VALUE THROUGHOUT THE FUNCTION
76300	FOREACH:16 .BY THE WAY, THIS WAS ONE OF MY SUGGESTIONS!! THE META:CODE W
76400	**AS CHANGED FROM (PROGN (COMMENT IN ALL CALLS
76500	TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PROGN (COMMENT I
76600	**N ALL CALLS TO DATE, ARG1 IS BOUND TO S1)
76700	(COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (C
76800	**OMMENT IN ALL CALLS TO DATE, ARG5 IS BOUND
76900	TO (COMMENT OR (COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (COMMENT 
77000	**PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL)))
77100	(PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND ((NULL EVAL:
77200	**ARG3) (SET ARG1 NIL) (RETURN NIL))) (SET ARG1
77300	(CAR EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL A
77400	**RG5)) (COND (RESULT:1 (RETURN 
77500	UNTIL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMMENT AT THE TIME THAT FORE
77600	**ACH:16 WAS CODED, THE UNTIL CONDITION VALUE
77700	WAS LEFT UNDEFINED)))) TO (PROGN (COMMENT IN ALL CALLS TO DATE, ARG3 IS 
77800	**INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PROGN
77900	(COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1) (COMMENT IN ALL CALL
78000	**S TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS)
78100	(COMMENT IN ALL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (COMMENT PAR
78200	**SE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (COMMENT
78300	PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL))) (PROG (RESULT:1) (SETQ EVAL:AR
78400	**G3 (EVAL ARG3)) LABEL:2 (COND ((NULL EVAL:ARG3)
78500	(SET ARG1 NIL) (RETURN NIL))) (SET ARG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3
78600	** (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL ARG5))
78700	(COND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMME
78800	**NT AT THE TIME THAT FOREACH:16 WAS CODED,
78900	THE UNTIL CONDITION VALUE WAS LEFT UNDEFINED))))))
79000	
79100	
79200	
79300	MOVE CURSOR TO INITIAL:VALUE:OF:SET:OF:LEGAL:STRINGS WHICH IS LOCATED IN
79400	**SIDE NIL
79500	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION GLOBAL:CONTEXT:0
79600	GC: 30
79700	306, 306 FREE WORDS
79800	
79900	
80000	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
80100	     I NOTICE THAT WE HAVE LEFT INITIAL:VALUE:OF:SET:OF:LEGAL:STRINGS UN
80200	**DEFINED. IT IS LOCATED IN
80300	     THE FUNCTION GLOBAL:CONTEXT:0.  IN OTHER WORDS, AT THE INSTANT WE K
80400	**NOW 
80500	THAT (COMMENT AT THE BEGINNING WE ONLY KNOW A CONSTANT AMOUNT OF INFORMA
80600	**TION, OFTEN NONE AT ALL)
80700	
80800	  I SUSPECT THAT THE ANSWER IS (NIL OR THE INITIAL STATE OF KNOWLEDGE AB
80900	**OUT LEGAL:STRINGS).
81000	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
81100	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
81200	 LATER.' GO AHEAD NOW
81300	USER: ((S))
81400	
81500	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING INITIA
81600	**L:VALUE:OF:SET:OF:LEGAL:STRINGS IN 
81700	GLOBAL:CONTEXT:0 UNDEFINED; WILL BE GOTTEN LATER; PROBABLY NIL OR THE IN
81800	**ITIAL STATE OF KNOWLEDGE ABOUT LEGAL:STRINGS
81900	SINCE (COMMENT AT THE BEGINNING WE ONLY KNOW A CONSTANT AMOUNT OF INFORM
82000	**ATION, OFTEN NONE AT ALL)) ,AND HERE IS WHAT
82100	WE FINALLY DID ABOUT IT: (SET:OF:LEGAL:STRINGS WILL RECEIVE THE GLOBAL I
82200	**NITIALIZATION VALUE ((S))))
82300	
82400	
82500	
82600	MOVE CURSOR TO UNTIL:CONDITION:VALUE WHICH IS LOCATED INSIDE (PROGN (COM
82700	**MENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRING
82800	**S) (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1) (COMMENT
82900	** IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT
83000	** IN ALL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FOR
83100	**WARD:17 S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARS
83200	**E:LEVEL))) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND
83300	** ((NULL EVAL:ARG3) (SET ARG1 NIL) (RETURN NIL))) (SET ARG1 (CAR EVAL:A
83400	**RG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL ARG5)) (CO
83500	**ND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMMEN
83600	**T AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL CONDITION VALUE WAS
83700	** LEFT UNDEFINED))))
83800	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION FOREACH:16
83900	GC: 30
84000	295, 295 FREE WORDS
84100	
84200	
84300	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
84400	     I NOTICE THAT WE HAVE LEFT UNTIL:CONDITION:VALUE UNDEFINED. IT IS L
84500	**OCATED IN
84600	     THE FUNCTION FOREACH:16.  IN OTHER WORDS, AT THE INSTANT WE KNOW 
84700	THAT (VECTOR THE UNTIL:CONDITION HAS BECOME TRUE FOR THE FIRST TIME. WE 
84800	**MUST KNOW WHAT VALUE TO RETURN)
84900	
85000	  I SUSPECT THAT THE ANSWER IS (EITHER RESULT:1 NIL OR (COMMENT EVAL UNT
85100	**IL:CONDITION) OR (COMMENT EVAL POSSIBLE:NAME:OF:CLASS)).
85200	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
85300	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
85400	 LATER.' GO AHEAD NOW
85500	USER: RESULT:1
85600	
85700	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING UNTIL:
85800	**CONDITION:VALUE IN FOREACH:16 UNDEFINED; WILL
85900	BE GOTTEN LATER; PROBABLY EITHER RESULT:1 NIL OR (COMMENT EVAL UNTIL:CON
86000	**DITION) OR (COMMENT EVAL POSSIBLE:NAME:OF:CLASS)
86100	SINCE (THE UNTIL:CONDITION HAS BECOME TRUE FOR THE FIRST TIME. WE MUST K
86200	**NOW WHAT VALUE TO RETURN)) ,AND HERE IS WHAT
86300	WE FINALLY DID ABOUT IT: (WE SUBSTITUTED RESULT:1 FOR UNTIL:CONDITION:VA
86400	**LUE THROUGHOUT THE FUNCTION FOREACH:16 .BY
86500	THE WAY, THIS WAS ONE OF MY SUGGESTIONS!! THE META:CODE WAS CHANGED FROM
86600	** (PROGN (COMMENT IN ALL CALLS TO DATE, ARG3
86700	IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PROGN (COMMENT IN ALL CALLS TO
86800	** DATE, ARG1 IS BOUND TO S1) (COMMENT IN ALL
86900	CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT IN ALL CA
87000	**LLS TO DATE, ARG5 IS BOUND TO (COMMENT OR
87100	(COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:
87200	**18 S1 ARG1 BPARSE:LEVEL))) (PROG (RESULT:1)
87300	(SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND ((NULL EVAL:ARG3) (SET ARG1 N
87400	**IL) (RETURN NIL))) (SET ARG1 (CAR EVAL:ARG3))
87500	(SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL ARG5)) (COND (RESU
87600	**LT:1 (RETURN RESULT:1)) (T (GO LABEL:2)))
87700	(COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL CONDITION VALU
87800	**E WAS LEFT UNDEFINED)))) TO (PROGN (COMMENT
87900	IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PRO
88000	**GN (COMMENT IN ALL CALLS TO DATE, ARG1 IS
88100	BOUND TO S1) (COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGA
88200	**L:STRINGS) (COMMENT IN ALL CALLS TO DATE,
88300	ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LE
88400	**VEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 
88500	BPARSE:LEVEL))) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (C
88600	**OND ((NULL EVAL:ARG3) (SET ARG1 NIL) (RETURN
88700	NIL))) (SET ARG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ
88800	** RESULT:1 (EVAL ARG5)) (COND (RESULT:1 (RETURN
88900	RESULT:1)) (T (GO LABEL:2))) (COMMENT AT THE TIME THAT FOREACH:16 WAS CO
89000	**DED, THE UNTIL CONDITION VALUE WAS LEFT 
89100	UNDEFINED))))))
89200	
89300	
89400	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (SET:OF:LEGAL:STRINGS I
89500	**S A DATA STRUCTURE, WITH ELEMENTS OF TYPE
89600	S1 ;BUT NO ACCESSION INFORMATION IS KNOWN) ,AND HERE IS WHAT WE FINALLY 
89700	**DID ABOUT IT: (I DONT THINK THIS MAKES TOO
89800	MUCH SENSE SO I AM GOING TO SKIP IT -- AT LEAST FOR NOW))
89900	
90000	
90100	
90200	MOVE CURSOR TO MODIFY:CONDITION WHICH IS LOCATED INSIDE (PROGN (COMMENT 
90300	**IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:
90400	**OF:14 ARG2)) (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (Q
90500	**UOTE SET:OF:RULES)) (MAPC MODIFY:SET (FUNCTION (LAMBDA (ILS) (COND ((M
90600	**ODIFY:CONDITION ILS) (MODIFY:STRUCTURE:23 ARG1 ARG2)))))))
90700	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION MODIFY:SOME:22
90800	
90900	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
91000	     I NOTICE THAT WE HAVE LEFT MODIFY:CONDITION UNDEFINED. IT IS LOCATE
91100	**D IN
91200	     THE FUNCTION MODIFY:SOME:22.  IN OTHER WORDS, AT THE INSTANT WE KNO
91300	**W 
91400	THAT (COMMENT THESE TWO ARE THE MOST PROBABLE TESTS WHEN (VECTOR GRAMMAT
91500	**ICAL:INFERENCE) IS INVOLVED)
91600	
91700	  I SUSPECT THAT THE ANSWER IS (SOME PREDICATE, E.G, PARSE OR TEST).
91800	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
91900	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
92000	 LATER.' GO AHEAD NOW
92100	USER: PARSE
92200	
92300	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE)
92400	IS THIS THE SAME AS A (VECTOR PARSE) WHICH WE'VE ALREADY SEEN AND NAMED?
92500	
92600	USER: YES
92700	
92800	GC: 30
92900	346, 346 FREE WORDS
93000	
93100	SINCE PARSE:15 IS THE ONLY NAME FOR (VECTOR PARSE),
93200	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
93300	YOU WANT. AM I RIGHT?
93400	USER: YES
93500	
93600	THE NAME CHOSEN IS PARSE:15
93700	
93800	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING MODIFY
93900	**:CONDITION IN MODIFY:SOME:22 UNDEFINED; WILL
94000	BE GOTTEN LATER; PROBABLY SOME PREDICATE, E.G, PARSE OR TEST SINCE (COMM
94100	**ENT THESE TWO ARE THE MOST PROBABLE TESTS
94200	WHEN (GRAMMATICAL:INFERENCE) IS INVOLVED)) ,AND HERE IS WHAT WE FINALLY 
94300	**DID ABOUT IT: (WE SUBSTITUTED PARSE FOR 
94400	MODIFY:CONDITION THROUGHOUT THE FUNCTION MODIFY:SOME:22 .BY THE WAY, THI
94500	**S WAS ONE OF MY SUGGESTIONS!! THE META:CODE
94600	WAS CHANGED FROM (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIA
94700	**TED AS (TUPLE SOME:PART:OF:14 ARG2)) (COMMENT
94800	IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RULES)) (MAP
94900	**C MODIFY:SET (FUNCTION (LAMBDA (ILS) (COND
95000	((PARSE ILS) (MODIFY:STRUCTURE:23 ARG1 ARG2))))))) TO (PROGN (COMMENT IN
95100	** ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS
95200	(TUPLE SOME:PART:OF:14 ARG2)) (COMMENT IN ALL CALLS TO DATE, ARG2 IS INS
95300	**TANTIATED AS (QUOTE SET:OF:RULES)) (MAPC 
95400	MODIFY:SET (FUNCTION (LAMBDA (ILS) (COND ((PARSE:15 ILS) (MODIFY:STRUCTU
95500	**RE:23 ARG1 ARG2)))))))))
95600	
95700	
95800	
95900	MOVE CURSOR TO ARG2 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
96000	**NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NIL) (COMMENT IN ALL 
96100	**CALLS TO DATE, ARG2 IS INSTANTIATED AS AR) (COMMENT IN ALL CALLS TO DA
96200	**TE, ARG3 IS INSTANTIATED AS (SUB1 ARG3)) (COND ((EQUAL ARG1 ARG2) T) (
96300	**(ZEROP ARG3) NIL) (T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR I
96400	**N (APPLYRULE:19 (ANTIRULE R) ARG2) DO (PROG1 (PARSE:BACKWARD:18 ARG1 A
96500	**R (SUB1 ARG3)) (CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDI
96600	**TIONAL:INSERTION:20 (ANTIRULE R) (QUOTE RULES:USED)))))))) WHICH IS TH
96700	**E BODY OF THE FUNCTION PARSE:BACKWARD:18
96800	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:BACKWARD:18 W
96900	**E SHOULD REPLACE ARG2 BY PARSE:BACKWARD:18:ARG2)
97000	,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG2 BY PARSE:BA
97100	**CKWARD:18:ARG2 IN THE BEING PARSE:BACKWARD:18))
97200	
97300	
97400	
97500	MOVE CURSOR TO ARG3 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
97600	**NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NIL) (COMMENT IN ALL 
97700	**CALLS TO DATE, PARSE:BACKWARD:18:ARG2 IS INSTANTIATED AS AR) (COMMENT 
97800	**IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS (SUB1 ARG3)) (COND ((EQU
97900	**AL ARG1 PARSE:BACKWARD:18:ARG2) T) ((ZEROP ARG3) NIL) (T (FOREACH:16 R
98000	** IN SET:OF:RULES DO (FOREACH:16 AR IN (APPLYRULE:19 (ANTIRULE R) PARSE
98100	**:BACKWARD:18:ARG2) DO (PROG1 (PARSE:BACKWARD:18 ARG1 AR (SUB1 ARG3)) (
98200	**CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSERTION
98300	**:20 (ANTIRULE R) (QUOTE RULES:USED)))))))) WHICH IS THE BODY OF THE FU
98400	**NCTION PARSE:BACKWARD:18
98500	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:BACKWARD:18 W
98600	**E SHOULD REPLACE ARG3 BY PARSE:BACKWARD:18:ARG3)
98700	,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG3 BY PARSE:BA
98800	**CKWARD:18:ARG3 IN THE BEING PARSE:BACKWARD:18))
98900	
99000	
99100	GC: 30
99200	287, 287 FREE WORDS
99300	
99400	
99500	MOVE CURSOR TO ARG1 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
99600	**NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NIL) (COMMENT IN ALL 
99700	**CALLS TO DATE, PARSE:BACKWARD:18:ARG2 IS INSTANTIATED AS AR) (COMMENT 
99800	**IN ALL CALLS TO DATE, PARSE:BACKWARD:18:ARG3 IS INSTANTIATED AS (SUB1 
99900	**PARSE:BACKWARD:18:ARG3)) (COND ((EQUAL ARG1 PARSE:BACKWARD:18:ARG2) T)
     

00100	** ((ZEROP PARSE:BACKWARD:18:ARG3) NIL) (T (FOREACH:16 R IN SET:OF:RULES
00200	** DO (FOREACH:16 AR IN (APPLYRULE:19 (ANTIRULE R) PARSE:BACKWARD:18:ARG
00300	**2) DO (PROG1 (PARSE:BACKWARD:18 ARG1 AR (SUB1 PARSE:BACKWARD:18:ARG3))
00400	** (CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSERTI
00500	**ON:20 (ANTIRULE R) (QUOTE RULES:USED)))))))) WHICH IS THE BODY OF THE 
00600	**FUNCTION PARSE:BACKWARD:18
00700	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:BACKWARD:18 W
00800	**E SHOULD REPLACE ARG1 BY PARSE:BACKWARD:18:ARG1)
00900	,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG1 BY PARSE:BA
01000	**CKWARD:18:ARG1 IN THE BEING PARSE:BACKWARD:18))
01100	
01200	
01300	
01400	MOVE CURSOR TO ARG3 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
01500	**NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS AR) (COMMENT IN ALL C
01600	**ALLS TO DATE, ARG2 IS INSTANTIATED AS NIL) (COMMENT IN ALL CALLS TO DA
01700	**TE, ARG3 IS INSTANTIATED AS (SUB1 ARG3)) (COND ((EQUAL ARG1 ARG2) T) (
01800	**(ZEROP ARG3) NIL) (T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR I
01900	**N (APPLYRULE:19 R ARG1) DO (PROG1 (PARSE:FORWARD:17 AR ARG2 (SUB1 ARG3
02000	**)) (CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSER
02100	**TION:20 R (QUOTE RULES:USED)))))))) WHICH IS THE BODY OF THE FUNCTION 
02200	**PARSE:FORWARD:17
02300	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:FORWARD:17 WE
02400	** SHOULD REPLACE ARG3 BY PARSE:FORWARD:17:ARG3)
02500	,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG3 BY PARSE:FO
02600	**RWARD:17:ARG3 IN THE BEING PARSE:FORWARD:17))
02700	
02800	
02900	GC: 30
03000	266, 266 FREE WORDS
03100	
03200	
03300	MOVE CURSOR TO ARG2 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
03400	**NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS AR) (COMMENT IN ALL C
03500	**ALLS TO DATE, ARG2 IS INSTANTIATED AS NIL) (COMMENT IN ALL CALLS TO DA
03600	**TE, PARSE:FORWARD:17:ARG3 IS INSTANTIATED AS (SUB1 PARSE:FORWARD:17:AR
03700	**G3)) (COND ((EQUAL ARG1 ARG2) T) ((ZEROP PARSE:FORWARD:17:ARG3) NIL) (
03800	**T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR IN (APPLYRULE:19 R A
03900	**RG1) DO (PROG1 (PARSE:FORWARD:17 AR ARG2 (SUB1 PARSE:FORWARD:17:ARG3))
04000	** (CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSERTI
04100	**ON:20 R (QUOTE RULES:USED)))))))) WHICH IS THE BODY OF THE FUNCTION PA
04200	**RSE:FORWARD:17
04300	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:FORWARD:17 WE
04400	** SHOULD REPLACE ARG2 BY PARSE:FORWARD:17:ARG2)
04500	,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG2 BY PARSE:FO
04600	**RWARD:17:ARG2 IN THE BEING PARSE:FORWARD:17))
04700	
04800	
04900	
05000	MOVE CURSOR TO ARG1 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
05100	**NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS AR) (COMMENT IN ALL C
05200	**ALLS TO DATE, PARSE:FORWARD:17:ARG2 IS INSTANTIATED AS NIL) (COMMENT I
05300	**N ALL CALLS TO DATE, PARSE:FORWARD:17:ARG3 IS INSTANTIATED AS (SUB1 PA
05400	**RSE:FORWARD:17:ARG3)) (COND ((EQUAL ARG1 PARSE:FORWARD:17:ARG2) T) ((Z
05500	**EROP PARSE:FORWARD:17:ARG3) NIL) (T (FOREACH:16 R IN SET:OF:RULES DO (
05600	**FOREACH:16 AR IN (APPLYRULE:19 R ARG1) DO (PROG1 (PARSE:FORWARD:17 AR 
05700	**PARSE:FORWARD:17:ARG2 (SUB1 PARSE:FORWARD:17:ARG3)) (CONDITIONAL:INSER
05800	**TION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSERTION:20 R (QUOTE RULE
05900	**S:USED)))))))) WHICH IS THE BODY OF THE FUNCTION PARSE:FORWARD:17
06000	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:FORWARD:17 WE
06100	** SHOULD REPLACE ARG1 BY PARSE:FORWARD:17:ARG1)
06200	,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG1 BY PARSE:FO
06300	**RWARD:17:ARG1 IN THE BEING PARSE:FORWARD:17))
06400	
06500	
06600	GC: 30
06800	273, 273 FREE WORDS
08200	
08300	
08400	MOVE CURSOR TO BPARSE:LEVEL WHICH IS LOCATED INSIDE (PROGN (COMMENT IN A
08500	**LL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN ARG1 (COMM
08600	**ENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 INTO NOTING ITS INST
08700	**ANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:USED NIL
08800	**) (SETQ ARG1 (SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:LEGAL:ST
08900	**RINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (PARSE:BACKWARD:1
09000	**8 S1 ARG1 BPARSE:LEVEL)))))
09100	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION PARSE:15PUPRIN1
09200	
09300	
09400	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
09500	     I NOTICE THAT WE HAVE LEFT BPARSE:LEVEL UNDEFINED. IT IS LOCATED IN
09600	     THE FUNCTION PARSE:15.  IN OTHER WORDS, AT THE INSTANT WE KNOW 
09700	THAT (COMMENT 1 IS TOO SHALLOW AND >5 IS TOO LONG TO RUN REASONABLY)
09800	
09900	  I SUSPECT THAT THE ANSWER IS (ONE OF 2 3 4 5).
10000	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
10100	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
10200	 LATER.' GO AHEAD NOW
10300	USER: 3
10400	
10500	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING BPARSE
10600	**:LEVEL IN PARSE:15 UNDEFINED; WILL BE GOTTEN
10700	LATER; PROBABLY ONE OF 2 3 4 5 SINCE (COMMENT 1 IS TOO SHALLOW AND >5 IS
10800	** TOO LONG TO RUN REASONABLY)) ,AND HERE IS
10900	WHAT WE FINALLY DID ABOUT IT: (WE SUBSTITUTED 3 FOR BPARSE:LEVEL THROUGH
11000	**OUT THE FUNCTION PARSE:15 .BY THE WAY, THIS
11100	WAS ONE OF MY SUGGESTIONS!! THE META:CODE WAS CHANGED FROM (PROGN (COMME
11200	**NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED
11300	AS ELEMENT:6) (PROGN ARG1 (COMMENT THIS APPEARANCE OF ARG1 IS JUST TO NU
11400	**DGE PUP5 INTO NOTING ITS INSTANTIATION HERE
11500	IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:USED NIL) (SETQ ARG1 (SOM
11600	**E:PART:OF:14 ARG1)) (FOREACH:16 S1 IN 
11700	SET:OF:LEGAL:STRINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (PAR
11800	**SE:BACKWARD:18 S1 ARG1 3))))) TO (PROGN (COMMENT
11900	IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN ARG1 (CO
12000	**MMENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE
12100	PUP5 INTO NOTING ITS INSTANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NI
12200	**L) (SETQ RULES:USED NIL) (SETQ ARG1 (
12300	SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:LEGAL:STRINGS DO (OR (PA
12400	**RSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (
12500	PARSE:BACKWARD:18 S1 ARG1 3)))))))
12600	
12700	
12800	
12900	MOVE CURSOR TO FPARSE:LEVEL WHICH IS LOCATED INSIDE (PROGN (COMMENT IN A
13000	**LL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN ARG1 (COMM
13100	**ENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 INTO NOTING ITS INST
13200	**ANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:USED NIL
13300	**) (SETQ ARG1 (SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:LEGAL:ST
13400	**RINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (PARSE:BACKWARD:1
13500	**8 S1 ARG1 3)))))
13600	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION PARSE:15
13700	GC: 30
13800	203, 203 FREE WORDS
13900	
14000	
14100	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
14200	     I NOTICE THAT WE HAVE LEFT FPARSE:LEVEL UNDEFINED. IT IS LOCATED IN
14300	     THE FUNCTION PARSE:15.  IN OTHER WORDS, AT THE INSTANT WE KNOW 
14400	THAT (COMMENT 1 IS TOO SHALLOW AND >5 IS TOO DEEP AND WOULD TAKE TOO LON
14500	**G)
14600	
14700	  I SUSPECT THAT THE ANSWER IS (ONE OF 2 3 4 5).
14800	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
14900	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
15000	 LATER.' GO AHEAD NOW
15100	USER: 2
15200	
15300	GC: 28
15400	285, 285 FREE WORDS
15500	
15600	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING FPARSE
15700	**:LEVEL IN PARSE:15 UNDEFINED; WILL BE GOTTEN
15800	LATER; PROBABLY ONE OF 2 3 4 5 SINCE (COMMENT 1 IS TOO SHALLOW AND >5 IS
15900	** TOO DEEP AND WOULD TAKE TOO LONG)) ,AND HERE
16000	IS WHAT WE FINALLY DID ABOUT IT: (WE SUBSTITUTED 2 FOR FPARSE:LEVEL THRO
16100	**UGHOUT THE FUNCTION PARSE:15 .BY THE WAY,
16200	THIS WAS ONE OF MY SUGGESTIONS!! THE META:CODE WAS CHANGED FROM (PROGN (
16300	**COMMENT IN ALL CALLS TO DATE, ARG1 IS 
16400	INSTANTIATED AS ELEMENT:6) (PROGN ARG1 (COMMENT THIS APPEARANCE OF ARG1 
16500	**IS JUST TO NUDGE PUP5 INTO NOTING ITS 
16600	INSTANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:USED N
16700	**IL) (SETQ ARG1 (SOME:PART:OF:14 ARG1)) (
16800	FOREACH:16 S1 IN SET:OF:LEGAL:STRINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 2
16900	**) (PARSE:BACKWARD:18 S1 ARG1 3))))) TO (PROGN
17000	(COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN
17100	** ARG1 (COMMENT THIS APPEARANCE OF ARG1 IS
17200	JUST TO NUDGE PUP5 INTO NOTING ITS INSTANTIATION HERE IN THE CODE) (SETQ
17300	** PARSE:TREE NIL) (SETQ RULES:USED NIL) (SETQ
17400	ARG1 (SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:LEGAL:STRINGS DO (
17500	**OR (PARSE:FORWARD:17 S1 ARG1 2) (
17600	PARSE:BACKWARD:18 S1 ARG1 3)))))))
17700	
17800	
17900	
18000	MOVE CURSOR BACK AND FORTH OVER THE INFINITE LOOP FROM LABEL:3 TO (VECTO
18100	**R GO LABEL:3) IN THE BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS TO DA
18200	**TE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (COMM
18300	**ENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RULES)
18400	**) (PROG NIL LABEL:3 (MODIFY:STRUCTURE:25 ARG1 ARG2) (GO LABEL:3) (COMM
18500	**ENT INFINITE LOOP IN THIS PROG))) WHICH IS THE BODY
18600	OF THE FUNCTION MODIFY:UNTIL:24
18700	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR IS:OF:TYPE)
18800	IS THIS THE SAME AS A (VECTOR IS:OF:TYPE) WHICH WE'VE ALREADY SEEN AND N
18900	**AMED?
19000	
19100	USER: NO
19200	I DON'T KNOW ANY NAMES FOR (VECTOR IS:OF:TYPE), SO YOU'LL HAVE TO
19300	TYPE A BRAND NEW NAME IN TO ME. 
19400	USER: NIL
19500	
19600	THE NAME CHOSEN IS IS:OF:TYPE:31
19700	
19800	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (INFINITE LOOP IN MODIF
19900	**Y:UNTIL:24 FROM LABEL:3 TO (GO LABEL:3)) ,AND
20000	HERE IS WHAT WE FINALLY DID ABOUT IT: (INFINITE LOOP TERMINATION DECISIO
20100	**N IS ABOUT TO BE INVESTIGATED, I BETCHA!!!))
20200	
20300	
20400	GC: 30
20500	252, 252 FREE WORDS
20600	
20700	MOVE CURSOR TO (VECTOR IS:OF:TYPE:31 TYPE OF (VECTOR IS:OF:TYPE))
20800	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
20900	**SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
21000	PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
21100	** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
21200	TO IT)SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
21300	TYPE IN THE DEFINITION OF IS:OF:TYPE:31
21400	
21500	SINCE THIS IS A PREDICATE, THE EXPRESSION YOU TYPE IN SHOULD BE A
21600	LOGICAL EXPRESSION, WHICH IS TRUE IF ARG1 IS OF
21700	THE (BREAKAWAY) TYPE, AND SHOULD BE FALSE IF IT ISNT OF
21800	THAT TYPE.
21900	
22000	SHOULD I DISCUSS RAMIFICATIONS?NO
22100	
22200	USER: (ARG1 CAN BE PARSED EQUALS NIL)
22300	
22400	GC: 8
22500	15057, 15057 FREE WORDS
22600	
22700	MOVE CURSOR TO (VECTOR IS:OF:TYPE:31 TYPE OF (VECTOR IS:OF:TYPE))
22800	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
22900	**SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
23000	PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
23100	** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
23200	TO IT)
23300	MOVE CURSOR TO IS:OF:TYPE:31
23400	
23500	
23600	PUP IS NOW GOING TO ENCODE THE PIECE 
23700	  (EQUAL (PARSE ARG1)
23800	         NIL)
23900	
24000	
24100	OF THE FUNCTION IS:OF:TYPE:31 INTO LISP.   FUNCTION NAMES WILL
24200	BE QUERIED IN PREORDER, AS NEEDED.
24300	
24400	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE)
24500	IS THIS THE SAME AS A (VECTOR PARSE) WHICH WE'VE ALREADY SEEN AND NAMED?
24600	
24700	USER: YES
24800	
24900	SINCE PARSE:15 IS THE ONLY NAME FOR (VECTOR PARSE),
25000	AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
25100	YOU WANT. AM I RIGHT?
25200	USER: YES
25300	
25400	THE NAME CHOSEN IS PARSE:15
25500	
25600	GC: 8
25700	15034, 15034 FREE WORDS
25800	
25900	
26000	DRAW A LINE FROM THE FUNCTION CALL  (IS:OF:TYPE:31 ARG1 (COMMENT BREAKAW
26100	**AY)) OF THE FUNCTION IS:OF:TYPE:31 TO THIS NEW PIECE OF CODE, WHICH IS
26200	** ITS BODY:
26300	
26400	(IS:OF:TYPE:31
26500	  (LAMBDA (ARG1 DUMMY:ARGUMENT:1)
26600	    (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
26700	** SOME:PART:OF:14 ARG2))
26800	    (EQUAL (PARSE:15 ARG1)
26900	           NIL)))
27000	
27100	
27200	IS (MATCH (TUPLE COMMENT FRAG1) DUMMY:ARGUMENT:1) STILL THE PROPER EXPLI
27300	**CIT
27400	ARGS CHECK FOR THE FUNCTION IS:OF:TYPE:31?
27500	USER: NO
27600	
27700	WHAT IS THE CHECK, THEN? (I SUGGEST 'T')
27800	USER: T
27900	(IS:OF:TYPE:31 redefined)
28000	
28100	GC: 30
28200	195, 707 FREE WORDS
28300	
28400	
28500	MOVE CURSOR TO OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS WHICH IS LOCATED INS
28600	**IDE (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME
28700	**:OF:CLASS) (PROGN (COMMENT NOTHING MUCH TO DO HERE; JUST ONE SIMPLE AS
28800	**SIGNMENT TO AN ALREADY EXISITNG VALUE) (SET ARG1 OBVIOUS:KNOWN:VALUE:O
28900	**F:NAME:OF:CLASS)))
29000	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION TAKE:HOLD:OF:9
29100	
29200	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
29300	     I NOTICE THAT WE HAVE LEFT OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS UND
29400	**EFINED. IT IS LOCATED IN
29500	     THE FUNCTION TAKE:HOLD:OF:9.  IN OTHER WORDS, AT THE INSTANT WE KNO
29600	**W 
29700	THAT (COMMENT I KNOW I NEED NOT DO ANY REAL WORK TO GET IT)
29800	
29900	  I SUSPECT THAT THE ANSWER IS (SOME JUST-READ-IN VALUE).
30000	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
30100	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
30200	 LATER.' GO AHEAD NOW
30300	USER: CLASS:NAME:NAME:N
30400	
30500	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING OBVIOU
30600	**S:KNOWN:VALUE:OF:NAME:OF:CLASS IN TAKE:HOLD:OF:9
30700	UNDEFINED; WILL BE GOTTEN LATER; PROBABLY SOME JUST-READ-IN VALUE SINCE 
30800	**(COMMENT I KNOW I NEED NOT DO ANY REAL WORK
30900	TO GET IT)) ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE SUBSTITUTED C
31000	**LASS:NAME:NAME:N FOR 
31100	OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS THROUGHOUT THE FUNCTION TAKE:HOLD:O
31200	**F:9 .THIS WASN'T WHAT I EXPECTED, BY THE WAY.
31300	THE META:CODE WAS CHANGED FROM (PROGN (COMMENT IN ALL CALLS TO DATE, ARG
31400	**1 IS INSTANTIATED AS NAME:OF:CLASS) (PROGN
31500	(COMMENT NOTHING MUCH TO DO HERE; JUST ONE SIMPLE ASSIGNMENT TO AN ALREA
31600	**DY EXISITNG VALUE) (SET ARG1 CLASS:NAME:NAME:N)))
31700	TO (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME:OF
31800	**:CLASS) (PROGN (COMMENT NOTHING MUCH TO DO
31900	HERE; JUST ONE SIMPLE ASSIGNMENT TO AN ALREADY EXISITNG VALUE) (SET ARG1
32000	** CLASS:NAME:NAME:N)))))
32100	
32200	
32300	
32400	MOVE CURSOR BACK AND FORTH OVER THE INFINITE LOOP FROM LABEL:1 TO (VECTO
32500	**R GO LABEL:1) IN THE BLOCK OF CODE: (PROG NIL LABEL:1 (TAKE:HOLD:OF:5 
32600	**ELEMENT:6) (COND ((IS:OF:TYPE:7 ELEMENT:6 (COMMENT PARTITION:BY:TAKE:E
32700	**LE:AND:CLASS)) (PROGN (SETQ PRESULT (GET:HOLD:OF:8 NAME:OF:CLASS)) (CO
32800	**MMENT NOTICE THAT WE DO NOT NECESSARILY HAVE TO MAKE THE PRECEDING 'GU
32900	**ESS' IN ALL POSSIBLE ALGORITHMS) (TAKE:HOLD:OF:9 NAME:OF:CLASS) (COMPL
33000	**EX:MODIFY:STRUCTURE:10 NAME:OF:CLASS ELEMENT:6 PRESULT))) (T (PROGN (S
33100	**ETQ PRESULT (GET:HOLD:OF:8 NAME:OF:CLASS)) (TAKE:HOLD:OF:11 NAME:OF:CL
33200	**ASS) (COMPLEX:MODIFY:STRUCTURE:10 NAME:OF:CLASS ELEMENT:6 PRESULT)))) 
33300	**(GO LABEL:1) (COMMENT INFINITE LOOP IN THIS PROG)) WHICH IS THE BODY
33400	OF THE FUNCTION PAD:4
33500	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR IS:OF:TYPE)
33600	IS THIS THE SAME AS A (VECTOR IS:OF:TYPE) WHICH WE'VE ALREADY SEEN AND N
33700	**AMED?
33800	
33900	USER: NO
34000	I DON'T KNOW ANY NAMES FOR (VECTOR IS:OF:TYPE), SO YOU'LL HAVE TO
34100	TYPE A BRAND NEW NAME IN TO ME. 
34200	USER: NIL
34300	
34400	THE NAME CHOSEN IS IS:OF:TYPE:32
34500	
34600	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (INFINITE LOOP IN PAD:4
34700	** FROM LABEL:1 TO (GO LABEL:1)) ,AND HERE IS
34800	WHAT WE FINALLY DID ABOUT IT: (INFINITE LOOP TERMINATION DECISION IS ABO
34900	**UT TO BE INVESTIGATED, I BETCHA!!!))
35000	
35100	
35200	MOVE CURSOR TO (VECTOR IS:OF:TYPE:32 TYPE OF (VECTOR IS:OF:TYPE))
35300	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
35400	**SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
35500	PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
35600	** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
35700	TO IT)SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
35800	TYPE IN THE DEFINITION OF IS:OF:TYPE:32
35900	
36000	SINCE THIS IS A PREDICATE, THE EXPRESSION YOU TYPE IN SHOULD BE A
36100	LOGICAL EXPRESSION, WHICH IS TRUE IF ARG1 IS OF
36200	THE (BREAKAWAY) TYPE, AND SHOULD BE FALSE IF IT ISNT OF
36300	THAT TYPE.
36400	
36500	SHOULD I DISCUSS RAMIFICATIONS?NO
36600	
36700	USER: (THE SECOND ELEMENT OF ELEMENT:6 EQUALS S)
36800	
36900	GC: 8
37000	14244, 14244 FREE WORDS
37100	(IS S A LITERAL CONSTANT (WHOSE VALUE SHOULD BE ITSELF) (REPLY YES OR NO
37200	**, PLEASE) USER...)
37300	YES
37400	
37500	GC: 8
37600	14701, 14701 FREE WORDS
37700	
37800	MOVE CURSOR TO (VECTOR IS:OF:TYPE:32 TYPE OF (VECTOR IS:OF:TYPE))
37900	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
38000	**SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
38100	PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
38200	** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
38300	TO IT)
38400	MOVE CURSOR TO IS:OF:TYPE:32
38500	
38600	
38700	PUP IS NOW GOING TO ENCODE THE PIECE 
38800	  (EQUAL (CADR ELEMENT:6)
38900	         S)
39000	
39100	
39200	OF THE FUNCTION IS:OF:TYPE:32 INTO LISP.   FUNCTION NAMES WILL
39300	BE QUERIED IN PREORDER, AS NEEDED.
39400	
39500	
39600	DRAW A LINE FROM THE FUNCTION CALL  (IS:OF:TYPE:32 ARG1 (COMMENT BREAKAW
39700	**AY)) OF THE FUNCTION IS:OF:TYPE:32 TO THIS NEW PIECE OF CODE, WHICH IS
39800	** ITS BODY:
39900	
40000	(IS:OF:TYPE:32
40100	  (LAMBDA (DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
40200	    (EQUAL (CADR ELEMENT:6)
40300	           S)))
40400	
40500	
40600	IS (MATCH (TUPLE COMMENT FRAG1) DUMMY:ARGUMENT:1) STILL THE PROPER EXPLI
40700	**CIT
40800	ARGS CHECK FOR THE FUNCTION IS:OF:TYPE:32?
40900	USER: NO
41000	
41100	WHAT IS THE CHECK, THEN? (I SUGGEST 'T')
41200	USER: T
41300	(IS:OF:TYPE:32 redefined)
41400	
41500	
41600	MOVE CURSOR TO END OF THIS BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS T
41700	**O DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (
41800	**COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RU
41900	**LES)) (PROGN ARG1 ARG2 (COMMENT AT PRESENT WE HAVE NO BODY FOR THIS FU
42000	**NCTION, BUT WE HAVE FAITH THAT OTHER BEINGS WILL GIVE US MEANING LATER
42100	** ON)))
42200	WHICH IS THE CODE FOR THE FUNCTION LEGAL:LEGAL:MODIFY:STRUCTURE
42300	
42400	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
42500	IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
42600	** SEEN AND NAMED?
42700	
42800	USER: YES
42900	
43000	(CONDITIONAL:INSERTION:26 CONDITIONAL:INSERTION:20) ARE SUCH NAMES. 
43100	SINCE THERE IS MORE THAN ONE, TYPE IN THE NAME (AGAIN) 
43200	OF ONE OF THE ABOVE OR TYPE ] IF THE NAME YOU REALLY 
43300	WANT ISNT ONE OF THESE AFTER ALL 
43400	USER: CONDITIONAL:INSERTION:20
43500	
43600	THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
43700	
43800	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN LEGAL:LEGAL:MODIFY:
43900	**STRUCTURE WE SHOULD TACK ON (
44000	CONDITIONAL:INSERTION ARG1 (QUOTE SET:OF:LEGAL:STRINGS))) ,AND HERE IS W
44100	**HAT WE FINALLY DID ABOUT IT: (WE TACKED ON
44200	(CONDITIONAL:INSERTION:20 ARG1 (QUOTE SET:OF:LEGAL:STRINGS)) TO THE META
44300	**CODE OF THE BEING LEGAL:LEGAL:MODIFY:STRUCTURE))
44400	
44500	
44600	
44700	MOVE CURSOR TO END OF THIS BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS T
44800	**O DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (
44900	**COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RU
45000	**LES)) (PROGN (MODIFY:STRUCTURE:21 ARG1 ARG2) (MODIFY:SOME:22 ARG1 ARG2
45100	**)))
45200	WHICH IS THE CODE FOR THE FUNCTION LEGAL:ILLEGAL:MODIFY:STRUCTURE
45300	GC: 30
45400	760, 760 FREE WORDS
45500	
45600	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
45700	IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
45800	** SEEN AND NAMED?
45900	
46000	USER: YES
46100	
46200	(CONDITIONAL:INSERTION:26 CONDITIONAL:INSERTION:20) ARE SUCH NAMES. 
46300	SINCE THERE IS MORE THAN ONE, TYPE IN THE NAME (AGAIN) 
46400	OF ONE OF THE ABOVE OR TYPE ] IF THE NAME YOU REALLY 
46500	WANT ISNT ONE OF THESE AFTER ALL 
46600	USER: CONDITIONAL:INSERTION:20
46700	
46800	THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
46900	
47000	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN LEGAL:ILLEGAL:MODIF
47100	**Y:STRUCTURE WE SHOULD TACK ON (
47200	CONDITIONAL:INSERTION ARG1 (QUOTE SET:OF:LEGAL:STRINGS))) ,AND HERE IS W
47300	**HAT WE FINALLY DID ABOUT IT: (WE TACKED ON
47400	(CONDITIONAL:INSERTION:20 ARG1 (QUOTE SET:OF:LEGAL:STRINGS)) TO THE META
47500	**CODE OF THE BEING LEGAL:ILLEGAL:MODIFY:STRUCTURE))
47600	
47700	
47800	
47900	MOVE CURSOR TO END OF THIS BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS T
48000	**O DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (
48100	**COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RU
48200	**LES)) (PROGN (MODIFY:UNTIL:24 ARG1 ARG2)))
48300	WHICH IS THE CODE FOR THE FUNCTION ILLEGAL:LEGAL:MODIFY:STRUCTURE
48400	
48500	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
48600	IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
48700	** SEEN AND NAMED?
48800	
48900	USER: YES
49000	
49100	(CONDITIONAL:INSERTION:26 CONDITIONAL:INSERTION:20) ARE SUCH NAMES. 
49200	SINCE THERE IS MORE THAN ONE, TYPE IN THE NAME (AGAIN) 
49300	OF ONE OF THE ABOVE OR TYPE ] IF THE NAME YOU REALLY 
49400	WANT ISNT ONE OF THESE AFTER ALL 
49500	USER: CONDITIONAL:INSERTION:20
49600	
49700	THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
49800	
49900	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN ILLEGAL:LEGAL:MODIF
50000	**Y:STRUCTURE WE SHOULD TACK ON (
50100	CONDITIONAL:INSERTION ARG1 (QUOTE SET:OF:ILLEGAL:STRINGS))) ,AND HERE IS
50200	** WHAT WE FINALLY DID ABOUT IT: (WE TACKED
50300	ON (CONDITIONAL:INSERTION:20 ARG1 (QUOTE SET:OF:ILLEGAL:STRINGS)) TO THE
50400	** METACODE OF THE BEING 
50500	ILLEGAL:LEGAL:MODIFY:STRUCTURE))
50600	
50700	
50800	
50900	MOVE CURSOR TO END OF THIS BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS T
51000	**O DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (
51100	**COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RU
51200	**LES)) (PROGN ARG1 ARG2 (COMMENT AT PRESENT WE HAVE NO BODY FOR THIS FU
51300	**NCTION, BUT WE HAVE FAITH THAT OTHER BEINGS WILL GIVE US MEANING LATER
51400	** ON)))
51500	WHICH IS THE CODE FOR THE FUNCTION ILLEGAL:ILLEGAL:MODIFY:STRUCTURE
51600	
51700	PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
51800	IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
51900	** SEEN AND NAMED?
52000	
52100	USER: YES
52200	
52300	(CONDITIONAL:INSERTION:26 CONDITIONAL:INSERTION:20) ARE SUCH NAMES. 
52400	SINCE THERE IS MORE THAN ONE, TYPE IN THE NAME (AGAIN) 
52500	OF ONE OF THE ABOVE OR TYPE ] IF THE NAME YOU REALLY 
52600	WANT ISNT ONE OF THESE AFTER ALL 
52700	USER: CONDITIONAL:INSERTION:20
52800	
52900	THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
53000	
53100	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN ILLEGAL:ILLEGAL:MOD
53200	**IFY:STRUCTURE WE SHOULD TACK ON (
53300	CONDITIONAL:INSERTION ARG1 (QUOTE SET:OF:ILLEGAL:STRINGS))) ,AND HERE IS
53400	** WHAT WE FINALLY DID ABOUT IT: (WE TACKED
53500	ON (CONDITIONAL:INSERTION:20 ARG1 (QUOTE SET:OF:ILLEGAL:STRINGS)) TO THE
53600	** METACODE OF THE BEING 
53700	ILLEGAL:ILLEGAL:MODIFY:STRUCTURE))
53800	
53900	
54000	
54100	MOVE CURSOR TO INITIAL:VALUE:OF:SET:OF:ILLEGAL:STRINGS WHICH IS LOCATED 
54200	**INSIDE NIL
54300	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION GLOBAL:CONTEXT:0
54400	
54500	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
54600	     I NOTICE THAT WE HAVE LEFT INITIAL:VALUE:OF:SET:OF:ILLEGAL:STRINGS 
54700	**UNDEFINED. IT IS LOCATED IN
54800	     THE FUNCTION GLOBAL:CONTEXT:0.  IN OTHER WORDS, AT THE INSTANT WE K
54900	**NOW 
55000	THAT (COMMENT WE DON'T SEEM TO EVER USE ANY INITIAL KNOWLEDGE OF ARG1 IN
55100	** ANY CRUCIAL WAY)
55200	
55300	  I SUSPECT THAT THE ANSWER IS (NIL).
55400	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
55500	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
55600	 LATER.' GO AHEAD NOW
55700	USER: NIL
55800	
55900	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING INITIA
56000	**L:VALUE:OF:SET:OF:ILLEGAL:STRINGS IN 
56100	GLOBAL:CONTEXT:0 UNDEFINED; WILL BE GOTTEN LATER; PROBABLY NIL SINCE (CO
56200	**MMENT WE DON'T SEEM TO EVER USE ANY INITIAL
56300	KNOWLEDGE OF ARG1 IN ANY CRUCIAL WAY)) ,AND HERE IS WHAT WE FINALLY DID 
56400	**ABOUT IT: (SET:OF:ILLEGAL:STRINGS WILL RECEIVE
56500	THE GLOBAL INITIALIZATION VALUE NIL))
56600	
56700	
56800	
56900	MOVE CURSOR TO MODIFY:SET WHICH IS LOCATED INSIDE (PROGN (COMMENT IN ALL
57000	** CALLS TO DATE, ARG1 IS INSTANTIATED AS (TUPLE SOME:PART:OF:14 ARG2)) 
57100	**(COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:R
57200	**ULES)) (MAPC MODIFY:SET (FUNCTION (LAMBDA (ILS) (COND ((PARSE:15 ILS) 
57300	**(MODIFY:STRUCTURE:23 ARG1 ARG2)))))))
57400	WHICH IS THE BLOCK OF CODE FOR THE FUNCTION MODIFY:SOME:22
57500	
57600	PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
57700	     I NOTICE THAT WE HAVE LEFT MODIFY:SET UNDEFINED. IT IS LOCATED IN
57800	     THE FUNCTION MODIFY:SOME:22.  IN OTHER WORDS, AT THE INSTANT WE KNO
57900	**W 
58000	THAT (COMMENT THESE MAKE SENSE WITH RESPECT TO THE MODIFY:CONDITION)
58100	
58200	  I SUSPECT THAT THE ANSWER IS (ONE OF SET:OF:LEGAL:STRINGS SET:OF:ILLEG
58300	**AL:STRINGS).
58400	 PLEASE TYPE IN ONE OF THESE,  OR ELSE YOUR OWN ANSWER,  OR ELSE THE
58500	 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
58600	 LATER.' GO AHEAD NOW
58700	USER: SET:OF:ILLEGAL:STRINGS
58800	
58900	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING MODIFY
59000	**:SET IN MODIFY:SOME:22 UNDEFINED; WILL BE
59100	GOTTEN LATER; PROBABLY ONE OF SET:OF:LEGAL:STRINGS SET:OF:ILLEGAL:STRING
59200	**S SINCE (COMMENT THESE MAKE SENSE WITH RESPECT
59300	TO THE MODIFY:CONDITION)) ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE
59400	** SUBSTITUTED SET:OF:ILLEGAL:STRINGS FOR 
59500	MODIFY:SET THROUGHOUT THE FUNCTION MODIFY:SOME:22 .BY THE WAY, THIS WAS 
59600	**ONE OF MY SUGGESTIONS!! THE META:CODE WAS
59700	CHANGED FROM (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED 
59800	**AS (TUPLE SOME:PART:OF:14 ARG2)) (COMMENT
59900	IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RULES)) (MAP
60000	**C SET:OF:ILLEGAL:STRINGS (FUNCTION (LAMBDA
60100	(ILS) (COND ((PARSE:15 ILS) (MODIFY:STRUCTURE:23 ARG1 ARG2))))))) TO (PR
60200	**OGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS
60300	INSTANTIATED AS (TUPLE SOME:PART:OF:14 ARG2)) (COMMENT IN ALL CALLS TO D
60400	**ATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RULES))
60500	(MAPC SET:OF:ILLEGAL:STRINGS (FUNCTION (LAMBDA (ILS) (COND ((PARSE:15 IL
60600	**S) (MODIFY:STRUCTURE:23 ARG1 ARG2)))))))))
60700	
60800	
60900	GC: 30
61000	721, 721 FREE WORDS
61100	
61200	
61300	MOVE CURSOR TO ARG1 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
61400	**NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PA
61500	**RT:OF:14 ARG2)) (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS
61600	** LS) (PROGN (ELIM:COMMON:HEAD ARG1 ARG2 (QUOTE ARG1) (QUOTE ARG2)) (EL
61700	**IM:COMMON:TAIL ARG1 ARG2 (QUOTE ARG1) (QUOTE ARG2)) (COND ((IS:OF:TYPE
61800	**:28 ARG1 ARG2 (COMMENT OK TO INCLUDE THIS COMBO AS PLAUSIBLE NEW RULE)
61900	**) (LIST (LIST ARG1 ARG2) (LIST ARG2 ARG1)))))) WHICH IS THE BODY OF TH
62000	**E FUNCTION PATTERN:MATCH:27
62100	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PATTERN:MATCH:27 WE
62200	** SHOULD REPLACE ARG1 BY PATTERN:MATCH:27:ARG1)
62300	,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG1 BY PATTERN:
62400	**MATCH:27:ARG1 IN THE BEING PATTERN:MATCH:27))
62500	
62600	
62700	
62800	MOVE CURSOR TO ARG2 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
62900	**NT IN ALL CALLS TO DATE, PATTERN:MATCH:27:ARG1 IS INSTANTIATED AS (VEC
63000	**TOR TUPLE SOME:PART:OF:14 ARG2)) (COMMENT IN ALL CALLS TO DATE, ARG2 I
63100	**S INSTANTIATED AS LS) (PROGN (ELIM:COMMON:HEAD PATTERN:MATCH:27:ARG1 A
63200	**RG2 (QUOTE PATTERN:MATCH:27:ARG1) (QUOTE ARG2)) (ELIM:COMMON:TAIL PATT
63300	**ERN:MATCH:27:ARG1 ARG2 (QUOTE PATTERN:MATCH:27:ARG1) (QUOTE ARG2)) (CO
63400	**ND ((IS:OF:TYPE:28 PATTERN:MATCH:27:ARG1 ARG2 (COMMENT OK TO INCLUDE T
63500	**HIS COMBO AS PLAUSIBLE NEW RULE)) (LIST (LIST PATTERN:MATCH:27:ARG1 AR
63600	**G2) (LIST ARG2 PATTERN:MATCH:27:ARG1)))))) WHICH IS THE BODY OF THE FU
63700	**NCTION PATTERN:MATCH:27
63800	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PATTERN:MATCH:27 WE
63900	** SHOULD REPLACE ARG2 BY PATTERN:MATCH:27:ARG2)
64000	,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG2 BY PATTERN:
64100	**MATCH:27:ARG2 IN THE BEING PATTERN:MATCH:27))
64200	
64300	
64400	
64500	MOVE CURSOR TO ARG1 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
64600	**NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN ARG
64700	**1 (COMMENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 INTO NOTING I
64800	**TS INSTANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:U
64900	**SED NIL) (SETQ ARG1 (SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:L
65000	**EGAL:STRINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 2) (PARSE:BACKWARD:18 S1
65100	** ARG1 3))))) WHICH IS THE BODY OF THE FUNCTION PARSE:15
65200	PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:15 WE SHOULD 
65300	**REPLACE ARG1 BY PARSE:15:ARG1) ,AND HERE IS
65400	WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG1 BY PARSE:15:ARG1 IN THE 
65500	**BEING PARSE:15))
65600	
65700	 NEAR END OF TASK -- INTERRUPT? Y
65800	 REQUEST: (LISPXSTAAT\T\ATS)
65900	(20 LISPX INPUTS)
66000	(2872 UNDO SAVES)
66100	
66200	(1 CALLS TO EDITOR)
66300	(8 EDIT COMMANDS)
66400	(2 EDIT UNDO SAVES)
66500	
66600	
66700	
66800	
66900	OF THOSE DUE TO ERRORS:
67000	
67100	OF THE CALLS DUE TO DWIMIFYING:
67200	
67300	
67400	
67500	
67600	
67700	
67800	(2:10:23 CONSOLE TIME)
67900	(0:1:22 OF IT IN THE EDITOR)
68000	
68100	(0:45:15 CPU TIME)
68200	(0:0:0 OF IT IN DWIM)
68300	T
68400	 REQUEST: WHAT
68500	(WRITE A PROGRAM WHICH DOES (GRAMMATICAL:INFERENCE))
68600	 REQUEST: CH
68700	NIL *** WRITE:PROGRAM *** (SERVE)
68800	 REQUEST: WHY
68900	(FUNDAMENTAL DRIVE TO OBEY USER; ALSO, IT IS NECESSARY THAT CODE BE WRIT
69000	**TEN TO DO (GRAMMATICAL:INFERENCE) IN ORDER
69100	THAT THE TASK (GRAMMATICAL:INFERENCE) MIGHT BE COMPLETED; ALSO, EXAMINE 
69200	**SPEC:WHY)
69300	 REQUEST: SPEC:WHY
69400	(WE CALL THE FIRST BEING WHICH CAN BRING ABOUT THE EFFECT (TYPE OF ((GRA
69500	**MMATICAL:INFERENCE) HAS BEEN STUDIED)))
69600	 REQUEST: HOW
69700	(CREATE SPECIALIZED LISP CODE WHICH WILL DO (GRAMMATICAL:INFERENCE))
69800	 REQUEST: WHEN
69900	((T (COND ((MEMBER TASK ABLE:PUP:LIST) -75) (T 40)) (BECAUSE A PRE:EXIST
70000	**ING ABILITY TO DO (@ TASK) IMPLIES THAT WRITING
70100	A NEW PROGRAM TO ACCOMPLISH IT IS SUPERFLUOUS AND, CONVERSELY, THE INABI
70200	**LITY TO DO (@ TASK) ABDUCTIVELY ENCOURAGES
70300	US THAT WE ARE ON THE RIGHT TRACK)) ((MEMBER TASK WRITTEN:PROGRAMS:LIST)
70400	** -80 (QUOTE (BECAUSE WE ARE NOT AFTER MUCH
70500	EFFICIENCY, AND IF A PROGRAM ALREADY EXISTS, THEN WE SHOULD USE IT))) ((
70600	**MEMBER (PUP IS ABOUT TO WRITE A PROGRAM TO
70700	DO (@ TASK)) AWARE:USER:LIST) 70 (QUOTE (BECAUSE WE GO BY THE OLD ENGLIS
70800	**H LEGAL RULE, THAT SILENCE SIGNIFIES APPROVAL)))
70900	(T (COND (NEW:INFO:LIST -120) (T 40)) (QUOTE (BECAUSE WE SHOULD USE UP T
71000	**HE NEW INFORMATION BEFORE WRITING PROGRAMS
71100	ALSO: BECAUSE IF NO NEW INFO IS PRESENT, THEN WE NEEDN'T FEEL GUILTY ABO
71200	**UT STARTING TO WRITE A PROGRAM))))
71300	 REQUEST: SPEC:WHEN
71400	((T IS T SO WE DO ADD IN THE WEIGHT (COND ((MEMBER TASK ABLE:PUP:LIST) -
71500	**75) (T 40)) WHICH IN THE CURRENT CASE IS 40
71600	;THE EXPLANATION IS (BECAUSE A PRE:EXISTING ABILITY TO DO (VECTOR GRAMMA
71700	**TICAL:INFERENCE) IMPLIES THAT WRITING A NEW
71800	PROGRAM TO ACCOMPLISH IT IS SUPERFLUOUS AND, CONVERSELY, THE INABILITY T
71900	**O DO (VECTOR GRAMMATICAL:INFERENCE) ABDUCTIVELY
72000	ENCOURAGES US THAT WE ARE ON THE RIGHT TRACK)) ((MEMBER TASK WRITTEN:PRO
72100	**GRAMS:LIST) IS NIL SO WE DONT ADD IN THE WEIGHT
72200	-80 WHICH IN THE CURRENT CASE IS -80 ;THE EXPLANATION IS (BECAUSE WE ARE
72300	** NOT AFTER MUCH EFFICIENCY, AND IF A PROGRAM
72400	ALREADY EXISTS, THEN WE SHOULD USE IT)) ((MEMBER (TUPLE PUP IS ABOUT TO 
72500	**WRITE A PROGRAM TO DO (@ TASK)) AWARE:USER:LIST)
72600	IS NIL SO WE DONT ADD IN THE WEIGHT 70 WHICH IN THE CURRENT CASE IS 70 ;
72700	**THE EXPLANATION IS (BECAUSE WE GO BY THE OLD
72800	ENGLISH LEGAL RULE, THAT SILENCE SIGNIFIES APPROVAL)) (T IS T SO WE DO A
72900	**DD IN THE WEIGHT (COND (NEW:INFO:LIST -120)
73000	(T 40)) WHICH IN THE CURRENT CASE IS 40 ;THE EXPLANATION IS (BECAUSE WE 
73100	**SHOULD USE UP THE NEW INFORMATION BEFORE WRITING
73200	PROGRAMS ALSO: BECAUSE IF NO NEW INFO IS PRESENT, THEN WE NEEDN'T FEEL G
73300	**UILTY ABOUT STARTING TO WRITE A PROGRAM)))
73400	(THE FINAL WHEN VALUE IS THUS 80)
73500	 REQUEST: QUIT
73600	
73700	MOVE CURSOR TO NIL
73800	PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ADAPTATION DECI
73900	**SION:(DESIRED DIALOGUE BETWEEN GI:1 AND ITS
74000	USERS)
74100	
74200	HERE I WILL EVENTUALLY ASK FOR A SAMPLE DIALOGUE AND USE IT TO
74300	DETERMINE ALL THE FORMATS, AND TO CHECK ALL THE CODE.  NOT IN YET
74400	 SORRY, I AM INSERTING THE PRINT STATMENTS BY OMNISCIENCE 
74500	GC: 8
74600	12845, 12845 FREE WORDS
79200	(IS:OF:TYPE:32 redefined)
79400	(IS:OF:TYPE:31 redefined)
79500	(SOME:PART:OF:14 redefined)
79600	(SOME:PART:OF:13 redefined)
79700	(ILLEGAL:ILLEGAL:MODIFY:STRUCTURE redefined)
79800	(LEGAL:LEGAL:MODIFY:STRUCTURE redefined)
79900	(CONDITIONAL:DELETION:30 redefined)
80000	(MODIFY:STRUCTURE:25 redefined)
80100	(CONDITIONAL:DELETION:29 redefined)
80200	(MODIFY:STRUCTURE:23 redefined)
80300	(IS:OF:TYPE:28 redefined)
80400	(PATTERN:MATCH:27 redefined)
80500	(CONDITIONAL:INSERTION:26 redefined)
80600	(MODIFY:STRUCTURE:21 redefined)
80700	(MODIFY:UNTIL:24 redefined)
80800	(ILLEGAL:LEGAL:MODIFY:STRUCTURE redefined)
80900	(MODIFY:SOME:22 redefined)
81000	(LEGAL:ILLEGAL:MODIFY:STRUCTURE redefined)
81100	(CONDITIONAL:INSERTION:20 redefined)
81200	(PARSE:BACKWARD:18 redefined)
81300	(APPLYRULE:19 redefined)
81400	(PARSE:FORWARD:17 redefined)
81500	(FOREACH:16 redefined)
81600	(PARSE:15 redefined)
81700	(TAKE:HOLD:OF:11 redefined)
81800	(COMPLEX:MODIFY:STRUCTURE:10 redefined)
81900	(TAKE:HOLD:OF:9 redefined)
82000	(GET:HOLD:OF:8 redefined)
82100	(TAKE:HOLD:OF:5 redefined)
82200	(IS:OF:TYPE:7 redefined)
82300	(ELEMENT:6 redefined)
82400	(UNCOMMENTED:STRING:12 redefined)
82500	(PAD:4 redefined)
82600	(RULE redefined)
82700	(INFER:PHRASESTRUCTURE:GRAMMARS:3 redefined)
82800	(IFG:2 redefined)
82900	(GI:1 redefined)
83000	INTERRUPT? Y
83100	 REQUEST: CH
83200	NIL *** SUPPORT&DUMP *** (WRITE:PROGRAM SERVE)
83300	 REQUEST: WHAT
83400	(GATHER UP SUPPORTING BEINGS AND DUMP OUT GI:1 SYSTEM)
83500	 REQUEST: OLDER
83600	WRITE:PROGRAM
83700	 REQUEST: CH
83800	(SUPPORT&DUMP) *** WRITE:PROGRAM *** (SERVE)
83900	 REQUEST: OLDER
84000	SERVE
84100	 REQUEST: CH
84200	(SUPPORT&DUMP WRITE:PROGRAM) *** SERVE *** NIL
84300	 REQUEST: WHAT
84400	(DO ANYTHING THE USER ASKS)
84500	 REQUEST: WHY
84600	(FUNDAMENTAL DRIVE TO SERVE THE USER)
84700	 REQUEST: HOW
84800	(GET A TASK FROM THE USER)
84900	 REQUEST: YOUNGEST
85000	SUPPORT&DUMP
85100	 REQUEST: CH
85200	NIL *** SUPPORT&DUMP *** (WRITE:PROGRAM SERVE)
85300	 REQUEST: (AND (SETQ PREADLIST DIALOG)(GI:1))
85400	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
85500	0
85600	
85700	MY GUESS FOR THIS IS ILLEGAL
85800	u.b.a.
85900	(-232:ILLEGAL:MODIFY:STRUCTURE broken)
86000	:PRET(GI:1 T)
86100	T
86200	 REQUEST: (MAPC GLOBAL:INITIALIZATION:LIST EVAL)
86300	NIL
86400	 REQUEST: (GI:1)
86500	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
86600	(LEGAL N M)
86700	
86800	MY GUESS FOR THIS IS ILLEGAL
86900	LEGAL
87000	((S) (N M))
87100	
87200	ILLEGAL
87300	NIL
87400	
87500	
87600	SET:OF:RULES
87700	(((N M) (S)) ((S) (N M)))
87800	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
87900	(LEGAL S)
88000	
88100	MY GUESS FOR THIS IS LEGAL
88200	(COMMENT INFINITE LOOP IN THIS PROG)
88300	 REQUEST: (GI:1)
88400	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
88500	2
88600	
88700	MY GUESS FOR THIS IS ILLEGAL
88800	u.b.a.
88900	(#13527:ILLEGAL:MODIFY:STRUCTURE broken)
89000	:PRET(GI:1 T)
89100	T
89200	 REQUEST: (GI:1)
89300	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
89400	(??? N K)
89500	
89600	MY GUESS FOR THIS IS ILLEGAL
89700	(COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS)
89800	LEGAL
89900	LEGAL
90000	((S) (N M) (N K))
90100	
90200	ILLEGAL
90300	NIL
90400	
90500	
90600	SET:OF:RULES
90700	(((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
90800	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
90900	(??? N N)
91000	
91100	GC: 8
91200	10500, 10500 FREE WORDS
91300	
91400	MY GUESS FOR THIS IS ILLEGAL
91500	(COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS)
91600	ILLEGAL
91700	LEGAL
91800	((S) (N M) (N K))
91900	
92000	ILLEGAL
92100	((N N))
92200	
92300	
92400	SET:OF:RULES
92500	(((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
92600	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
92700	(ILLEGAL M N)
92800	
92900	GC: 8
93000	10497, 10497 FREE WORDS
93100	
93200	GC: 8
93400	10478, 10478 FREE WORDS
95000	
95100	MY GUESS FOR THIS IS ILLEGAL
95200	LEGAL
95300	((S) (N M) (N K))
95400	
95500	ILLEGAL
95600	((N N) (M N))
95700	
95800	
95900	SET:OF:RULES
96000	(((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
96100	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
96200	(LEGAL S)
96300	
96400	MY GUESS FOR THIS IS LEGAL
96500	(COMMENT INFINITE LOOP IN THIS PROG)
96600	 REQUEST: QUIT
96700	
96800	PUP: (FILE GI HAS BEEN MADE AND WILL SUPPORT BEING GI:1)
96900	
97000	
97100	PUP: (THE PROGRAM GI:1 TO DO (GRAMMATICAL:INFERENCE) IS COMPLETE)
97200	
97300	
97400	
97500	
97600	FINISHED CURRENT SERVICE; WHAT SHOULD I DO? TYPE ONE OF:
97700	
97800	1   EXIT FROM SYSTEM
97900	2   CONTINUE SERVING, AS BEFORE
98000	3   CONTINUE SERVING, BUT GET A NEW USER INTERRUPT LEVEL
98100	4   REINITIALIZE SYSTEM AND START FROM BEGINNING AGAIN
98200	
98300	OK, GO .......... π
     

01100	(0:49:18 CPU TIME)
01200	(0:0:0 OF IT IN DWIM)
01300	T
01400	:GIFNS
01500	(START)
01600	:GICOMS
01700	((FNS * GIFNS) SET:OF:BEINGS IS:BEING:LIST ASSERT:LISTS GLOBAL:INITIALIZ
01800	**ATION:LIST OLD:PREADLIST SB EXPERTAG YESNO:TAG
01900	TASK:TYPE ARG1 ARG2 (COMS * (LIST (APPEND (QUOTE (PROP ALL)) (SETDIFFERE
02000	**NCE IS:BEING:LIST SB)))) (P (MAPC (SETDIFFERENCE
02100	IS:BEING:LIST SB) (FUNCTION (LAMBDA (B) (SET B B) (SEMI:COMPILE B)))) (M
02200	**APC GLOBAL:INITIALIZATION:LIST (QUOTE EVAL))
02300	(PRINT (COMMENT TO AUTOMATICALLY ENTER THE FUNCTION GI:1 ,JUST TYPE IN A
02400	** CALL TO THE FUNCTION ENTER. THIS WILL 
02500	INITIALIZE THE ENTIRE BEINGS SYSTEM AND THEN CALL GI:1))))
02600	:LOGOUT)
02700	@DIR
02800	  1-SEP-74 22:58
02900	
03000	   <LENAT>
03100	 AIR.   ;1
03200	 AIRF.  ;7
03300	 EVEN.  ;2
03400	 GI .   ;2,1
03500	 GIF.   ;4,3
03600	 GV .   ;8
03700	 H  .   ;1
03800	 JOBINI.[EXEC];3
03900	 MIN.   ;6
04000	 P6 .   ;8
04100	 PUP6.  ;2
04200	    .COM;2
04300	 SD .   ;5
04400	 STOR.W ;1
04500	    .L  ;6
04600	
06800	@LISP
06900	
07000	
07100	INTERLISP-10  29-AUG-74 ...
07200	
07300	
07400	Good evening, Doug.
07500	←LOAD(STOR.L)
07600	FILE CREATED  1-SEP-74 16:25:45
07700	STORCOMS
07800	
07900	GC: 1
08000	1494, 6102 FREE WORDS
08100	
08200	GC: 8
08300	5028, 75035 FREE WORDS
08400	
08500	GC: 12
08600	1011, 2201 FREE WORDS
08700	
08800	GC: 28
08900	2031, 5103 FREE WORDS
09000	
09100	GC: 30
09200	497, 3057 FREE WORDS
09300	
09400	TYPE USED      ASSIGNED  SYSTEM
09500	1    42        6144      34816
09600	2    5120      5120      55296
09700	4    0         512       512
09800	8    595       75776     16384
09900	12   27        6656      13824
10000	16   0         512       512
10100	18   6         1536      1024
10200	24   4         512       1024
10300	28   17        5120      8704
10400	30   14        3072      2560
10500	SUM  5825      104960    134656
10600	STOR.L;6
10700	←LOAD(PUP6.COM)
10800	COMPILED ON  1-SEP-74 16:03:51
10900	FILE CREATED  1-SEP-74 15:51:05
11000	(LISTFILES redefined)
11100	
11200	GC: 1
11300	2608, 2608 FREE WORDS
11400	
11500	GC: 1
11600	1380, 1380 FREE WORDS
11700	
11800	GC: 1
11900	491, 491 FREE WORDS
12000	
12100	GC: 1
12200	400, 400 FREE WORDS
12300	
12400	GC: 1
12500	212, 724 FREE WORDS
12600	
12700	GC: 1
12800	396, 396 FREE WORDS
12900	
13000	GC: 1
13100	213, 213 FREE WORDS
13200	PUP6COMS
13300	
13400	GC: 16
13500	0, 512 FREE WORDS
13600	
13700	DWIM DISABLED. TO GET AUTOMATIC EDITF FROM SOURCE, TYPE DWIM(T)
13800	 MINI PUP FILE; USE FAD OR AD OR MAKEFILE PUP6COMS
13900	(PUP6COMS reset)
14000	PUP6.COM;2
14100	←LISPXSTATS)
14200	(3 LISPX INPUTS)
14300	(2660 UNDO SAVES)
15800	(0:6:24 CONSOLE TIME)
15900	(0:0:0 OF IT IN THE EDITOR)
16000	
16100	(0:2:15 CPU TIME)
16200	(0:0:0 OF IT IN DWIM)
16300	T
16400	←STORAGE(T)
16500	
16600	TYPE USED      ASSIGNED  SYSTEM
16700	1    6559      6656      34816
16800	2    5120      5120      55296
16900	4    23        512       512
17000	8    41591     75776     16384
17100	12   5967      6656      13824
17200	16   512       1024      512
17300	18   421       1536      1024
17400	24   273       512       1024
17500	28   5077      5120      8704
17600	30   2712      3072      2560
17700	SUM  68255     105984    134656
17800	NIL
18100	←LOAD(GI)
18200	FILE CREATED  1-SEP-74 22:53:11
18300	GICOMS
18400	(START redefined)
18500	
18600	GC: 28
18700	20, 532 FREE WORDS
18800	(SET:OF:BEINGS reset)
18900	(IS:BEING:LIST reset)
19000	(ASSERT:LISTS reset)
19100	(ARG1 reset)
19200	(COMMENT TO AUTOMATICALLY ENTER THE FUNCTION GI:1 ,JUST TYPE IN A CALL T
19300	**O THE FUNCTION ENTER. THIS WILL INITIALIZE
19400	THE ENTIRE BEINGS SYSTEM AND THEN CALL GI:1)
19500	GI.;2
19600	←LISPXSTATS)
19700	(7 LISPX INPUTS)
19800	(3377 UNDO SAVES)
21300	(0:11:16 CONSOLE TIME)
21400	(0:0:0 OF IT IN THE EDITOR)
21500	
21600	(0:2:56 CPU TIME)
21700	(0:0:0 OF IT IN DWIM)
21800	T
21900	←STORAGE(T)
22000	
22100	TYPE USED      ASSIGNED  SYSTEM
22200	1    6559      6656      34816
22300	2    5120      5120      55296
22400	4    23        512       512
22500	8    53517     75776     16384
22600	12   6432      7168      13824
22700	16   579       1024      512
22800	18   449       1536      1024
22900	24   289       512       1024
23000	28   5306      5632      8704
23100	30   2920      3072      2560
23200	SUM  81194     107008    134656
23300	NIL
23400	←ENTER(T)
23500	
23600	GC: 8
23700	18675, 18675 FREE WORDS
23800	
23900	I CAN GUESS ALL YOUR ANSWERS FOR A WHILE; SHOULD I? YES
24000	USER INTERRUPT LEVEL... 0
24100	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
28000	(LEGAL N M)
28100	
28200	MY GUESS FOR THIS IS ILLEGAL
28300	LEGAL
28400	((S) (N M))
28500	
28600	ILLEGAL
28700	NIL
28800	
28900	
29000	SET:OF:RULES
29100	(((N M) (S)) ((S) (N M)))
29200	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
29300	(LEGAL S)
29400	
29500	MY GUESS FOR THIS IS LEGAL
29600	
29700	
29800	
29900	FINISHED CURRENT SERVICE; WHAT SHOULD I DO? TYPE ONE OF:
30000	
30100	1   EXIT FROM SYSTEM
30200	2   CONTINUE SERVING, AS BEFORE
30300	3   CONTINUE SERVING, BUT GET A NEW USER INTERRUPT LEVEL
30400	4   REINITIALIZE SYSTEM AND START FROM BEGINNING AGAIN
30500	
30600	OK, GO .......... 2
30700	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
30800	(??? N K)
30900	
31000	MY GUESS FOR THIS IS ILLEGAL
31100	(COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS)
31200	LEGAL
31300	LEGAL
31400	((S) (N M) (N K))
31500	
31600	ILLEGAL
31700	NIL
31800	
31900	
32000	SET:OF:RULES
32100	(((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
32200	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
32300	(??? N N)
32400	
32500	MY GUESS FOR THIS IS ILLEGAL
32600	(COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS)
32700	ILLEGAL
32800	LEGAL
32900	((S) (N M) (N K))
33000	
33100	ILLEGAL
33200	((N N))
33300	
33400	
33500	SET:OF:RULES
33600	(((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
33700	(COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
33800	(ILLEGAL M N)
33900	
34000	GC: 8